react-native-fs实现文件下载、文本存储的示例代码


Posted in Javascript onSeptember 22, 2017

本文内容:

react-native-fs的简单使用

  1. 下载文件(图片、文件、视频、音频)
  2. 将文本写入本地 txt
  3. 读取txt文件内容
  4. 在已有的txt上添加新的文本
  5. 删除文件
  6. 上传文件 only iOS

github链接: https://github.com/itinance/react-native-fs

另外还有一个下载的库 :https://github.com/wkh237/react-native-fetch-blob

安装步骤

第一步:

npm install react-native-fs --save

第二步:

react-native link react-native-fs

OK 即可开始使用(不放心的可以按照github上的对比一下)

简单使用

import RNFS from 'react-native-fs';

下载文件

/*下载文件*/
  downloadFile() {
    // On Android, use "RNFS.DocumentDirectoryPath" (MainBundlePath is not defined)

    // 图片
    // const downloadDest = `${RNFS.MainBundlePath}/${((Math.random() * 1000) | 0)}.jpg`;
    // const formUrl = 'http://img.kaiyanapp.com/c7b46c492261a7c19fa880802afe93b3.png?imageMogr2/quality/60/format/jpg';

    // 文件
    // const downloadDest = `${RNFS.MainBundlePath}/${((Math.random() * 1000) | 0)}.zip`;
    // const formUrl = 'http://files.cnblogs.com/zhuqil/UIWebViewDemo.zip';

    // 视频
    // const downloadDest = `${RNFS.MainBundlePath}/${((Math.random() * 1000) | 0)}.mp4`;
    // http://gslb.miaopai.com/stream/SnY~bbkqbi2uLEBMXHxGqnNKqyiG9ub8.mp4?vend=miaopai&
    // https://gslb.miaopai.com/stream/BNaEYOL-tEwSrAiYBnPDR03dDlFavoWD.mp4?vend=miaopai&
    // const formUrl = 'https://gslb.miaopai.com/stream/9Q5ADAp2v5NHtQIeQT7t461VkNPxvC2T.mp4?vend=miaopai&';

    // 音频
    const downloadDest = `${RNFS.MainBundlePath}/${((Math.random() * 1000) | 0)}.mp3`;
    // http://wvoice.spriteapp.cn/voice/2015/0902/55e6fc6e4f7b9.mp3
    const formUrl = 'http://wvoice.spriteapp.cn/voice/2015/0818/55d2248309b09.mp3';

    const options = {
      fromUrl: formUrl,
      toFile: downloadDest,
      background: true,
      begin: (res) => {
        console.log('begin', res);
        console.log('contentLength:', res.contentLength / 1024 / 1024, 'M');
      },
      progress: (res) => {

        let pro = res.bytesWritten / res.contentLength;

        this.setState({
          progressNum: pro,
        });
      }
    };
    try {
      const ret = RNFS.downloadFile(options);
      ret.promise.then(res => {
        console.log('success', res);

        console.log('file://' + downloadDest)

      }).catch(err => {
        console.log('err', err);
      });
    }
    catch (e) {
      console.log(error);
    }

  }

将文本写入本地 txt

/*将文本写入本地 txt*/
  writeFile() {
    // create a path you want to write to
    const path = RNFS.MainBundlePath + '/test.txt';

    // write the file
    RNFS.writeFile(path, '这是一段文本,YES', 'utf8')
      .then((success) => {
        console.log('path', path);
      })
      .catch((err) => {
        console.log(err.message);
      });
  }

读取txt文件内容

/*读取txt文件内容*/
  readFile() {
    // create a path you want to delete
    const path = RNFS.MainBundlePath + '/test.txt';

    return RNFS.readFile(path)
      .then((result) => {
        console.log(result);

        this.setState({
          readTxtResult: result,
        })
      })
      .catch((err) => {
        console.log(err.message);

      });
  }

在已有的txt上添加新的文本

/*在已有的txt上添加新的文本*/
  appendFile() {
    const path = RNFS.MainBundlePath + '/test.txt';

    return RNFS.appendFile(path, '新添加的文本', 'utf8')
      .then((success) => {
        console.log('success');
      })
      .catch((err) => {
        console.log(err.message);

      });
  }

删除文件

/*删除文件*/
  deleteFile() {
    // create a path you want to delete
    const path = RNFS.MainBundlePath + '/test.txt';

    return RNFS.unlink(path)
      .then(() => {
        console.log('FILE DELETED');
      })
      // `unlink` will throw an error, if the item to unlink does not exist
      .catch((err) => {
        console.log(err.message);
      });
  }

上传文件 only iOS

/*上传文件 only iOS*/
  uploadFile() {
    const uploadSrc = `${RNFS.MainBundlePath}/test.txt`;

    const uploadUrl = 'http://buz.co/rnfs/upload-tester.php';

    const options = {
      toUrl: uploadUrl,
      files: [{name: 'myfile', filename: 'test.txt', filepath: uploadSrc, filetype: 'text/plain'}],
      background: true,
      method: 'POST', // PUT
      begin: (res) => {
        console.log('begin', res);
      },
      progress: (res) => {
        console.log('progress', res);
      }
    };

    const ret = RNFS.uploadFiles(options);

    return ret.promise.then(res => {
      const response = JSON.parse(res.body);
      console.log(response);

    })
      .catch(err => {
        console.log('err', err);
      });
  }

demo:https://github.com/chjwrr/RN-react-native-fs

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
解决node.js安装包失败的几种方法
Sep 02 Javascript
fullPage.js和CSS3实现全屏滚动效果
May 05 Javascript
AngularJS基于factory创建自定义服务的方法详解
May 25 Javascript
Vue仿手机qq的实例代码(demo)
Sep 08 Javascript
简单实现vue验证码60秒倒计时功能
Oct 11 Javascript
JS加密插件CryptoJS实现的Base64加密示例
Aug 16 Javascript
原生JS实现轮播图效果
Oct 12 Javascript
layui--js控制switch的切换方法
Sep 03 Javascript
通过vue写一个瀑布流插件代码实例
Sep 07 Javascript
laydate只显示时分 不显示秒的功能实现方法
Sep 28 Javascript
vue项目中常见问题及解决方案(推荐)
Oct 21 Javascript
jQuery 动态粒子效果示例代码
Jul 07 jQuery
jQuery实现table中两列CheckBox只能选中一个的示例
Sep 22 #jQuery
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
Sep 22 #jQuery
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
Sep 22 #Javascript
js表单序列化判断空值的实例
Sep 22 #Javascript
VUE中的无限循环代码解析
Sep 22 #Javascript
详解vue中引入stylus及报错解决方法
Sep 22 #Javascript
EL表达式截取字符串的函数说明
Sep 22 #Javascript
You might like
用PHP的ob_start() 控制您的浏览器cache
2009/08/03 PHP
php中导出数据到excel时数字变为科学计数的解决方法
2013/02/03 PHP
php实现与erlang的二进制通讯实例解析
2014/07/23 PHP
php简单获取复选框值的方法
2016/05/11 PHP
php禁用cookie后session设置方法分析
2016/10/19 PHP
php实现每日签到功能
2018/11/29 PHP
PHP array_reverse() 函数原理及实例解析
2020/07/14 PHP
JavaScript面向对象之体会[总结]
2008/11/13 Javascript
JavaScript高级程序设计 阅读笔记(二十一) JavaScript中的XML
2012/09/14 Javascript
jquery删除提示框弹出是否删除对话框
2014/01/07 Javascript
JavaScript静态类型检查工具FLOW简介
2015/01/06 Javascript
JS动态修改图片的URL(src)的方法
2015/04/01 Javascript
javascript顺序加载图片的方法
2015/07/18 Javascript
jQuery div拖拽用法实例
2016/01/14 Javascript
解析Node.js异常处理中domain模块的使用方法
2016/02/16 Javascript
JS实现向iframe中表单传值的方法
2017/03/24 Javascript
基于Bootstrap模态对话框只加载一次 remote 数据的解决方法
2017/07/09 Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
2019/05/06 Javascript
Vue使用watch监听一个对象中的属性的实现方法
2019/05/10 Javascript
javascript简单实现深浅拷贝过程详解
2019/10/08 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
2018/04/05 Python
浅析python的优势和不足之处
2018/11/20 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
2019/11/27 Python
VScode连接远程服务器上的jupyter notebook的实现
2020/04/23 Python
10款最佳Python开发工具推荐,每一款都是神器
2020/10/15 Python
香港万宁官方海外旗舰店:香港健与美连锁店
2018/09/27 全球购物
英语演讲稿范文
2014/01/03 职场文书
模特大赛策划方案
2014/05/28 职场文书
四风问题查摆材料
2014/08/25 职场文书
2015暑假打工实践报告
2015/07/13 职场文书
团支部书记竞选稿
2015/11/21 职场文书
房屋转让协议书(标准范本)
2016/03/21 职场文书
Python 实现绘制子图及子图刻度的变换等问题
2021/05/31 Python
什么是动态刷新率DRR? Windows11动态刷新率功能介绍
2021/11/21 数码科技
宝塔更新Python及Flask项目的部署
2022/04/11 Python