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 相关文章推荐
javascript 动态数据下的锚点错位问题解决方法
Dec 24 Javascript
jquery之empty()与remove()区别说明
Sep 10 Javascript
自定义ExtJS控件之下拉树和下拉表格附源码
Oct 15 Javascript
JavaScript中instanceof运算符的用法总结
Nov 19 Javascript
jQuery拖拽 & 弹出层 介绍与示例
Dec 27 Javascript
jquery 按键盘上的enter事件
May 11 Javascript
仿百度换肤功能的简单实例代码
Jul 11 Javascript
javascript 判断当前浏览器版本并判断ie版本
Feb 17 Javascript
Node.js利用console输出日志文件的方法示例
Apr 27 Javascript
实例分析vue循环列表动态数据的处理方法
Sep 28 Javascript
Vue自定义全局Toast和Loading的实例详解
Apr 18 Javascript
vue keep-alive列表页缓存 详情页返回上一页不刷新,定位到之前位置
Nov 26 Javascript
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函数的使用说明
2013/11/11 PHP
php-fpm配置详解
2014/02/12 PHP
PHP设计模式之观察者模式实例
2016/02/22 PHP
PHP中Restful api 错误提示返回值实现思路
2016/04/12 PHP
thinkPHP统计排行与分页显示功能示例
2016/12/02 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
浅谈PHP无限极分类原理
2019/03/14 PHP
window.dialogArguments 使用说明
2011/04/11 Javascript
图片放大镜jquery.jqzoom.js使用实例附放大镜图标
2014/06/19 Javascript
jQuery使用CSS()方法给指定元素同时设置多个样式
2015/03/26 Javascript
JQuery中DOM加载与事件执行实例分析
2015/06/13 Javascript
js判断主流浏览器类型和版本号的简单实现代码
2016/05/26 Javascript
基于JavaScript实现的插入排序算法分析
2017/04/14 Javascript
jQuery.ajax向后台传递数组问题的解决方法
2017/05/12 jQuery
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
JavaScript中运算符规则和隐式类型转换示例详解
2017/09/06 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
Vue-cli中为单独页面设置背景色的实现方法
2018/02/11 Javascript
从零开始用electron手撸一个截屏工具的示例代码
2018/10/10 Javascript
[56:42]VP vs RNG 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
linux系统使用python获取内存使用信息脚本分享
2014/01/15 Python
Python中防止sql注入的方法详解
2017/02/25 Python
python异步实现定时任务和周期任务的方法
2019/06/29 Python
python3中布局背景颜色代码分析
2020/12/01 Python
DOUGLAS波兰:在线销售香水和化妆品
2020/07/05 全球购物
电子商务毕业生求职信
2013/11/10 职场文书
大学生的自我鉴定范文
2014/01/21 职场文书
三严三实民主生活会发言稿
2014/10/13 职场文书
学习普通话的体会
2014/11/07 职场文书
2014年法务工作总结
2014/12/11 职场文书
小学科学教学计划
2015/01/21 职场文书
上课睡觉万能检讨书
2015/02/17 职场文书
离婚起诉书怎么写
2015/05/19 职场文书
golang 如何用反射reflect操作结构体
2021/04/28 Golang
如何使用Python实现一个简易的ORM模型
2021/05/12 Python
一小时学会TensorFlow2之基本操作2实例代码
2021/09/04 Python