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 学习笔记一些小技巧
Mar 28 Javascript
JavaScript类型转换方法及需要注意的问题小结(挺全面)
Nov 11 Javascript
Jquery submit()无法提交问题
Apr 21 Javascript
js日期对象兼容性的处理方法
Jan 28 Javascript
JS实现点击事件统计的简单实例
Jul 10 Javascript
jQuery实现页面顶部下拉广告
Dec 30 Javascript
获取当前按钮或者html的ID名称实例(推荐)
Jun 23 Javascript
剖析Angular Component的源码示例
Mar 23 Javascript
Vue全局分页组件的实现代码
Aug 10 Javascript
JavaScript高阶教程之“==”隐藏下的类型转换
Apr 11 Javascript
详解如何理解vue的key属性
Apr 14 Javascript
Vue过滤器(filter)实现及应用场景详解
Jun 15 Vue.js
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多用户计数器代码
2007/03/11 PHP
php 分页函数multi() discuz
2009/06/21 PHP
PHP人民币金额数字转中文大写的函数代码
2013/02/27 PHP
PHP基础知识介绍
2013/09/17 PHP
不同浏览器对回车提交表单的处理办法
2010/02/13 Javascript
Jquery 最近浏览过的商品的功能实现代码
2010/05/14 Javascript
javascript测试题练习代码
2012/10/10 Javascript
如何使用json在前后台进行数据传输实例介绍
2013/04/11 Javascript
js用闭包遍历树状数组的方法
2014/03/19 Javascript
javascript 兼容各个浏览器的事件
2015/02/04 Javascript
JS中图片压缩的方法小结
2017/11/14 Javascript
Angular实现的敏感文字自动过滤与提示功能示例
2017/12/29 Javascript
Bootstrap popover 实现鼠标移入移除显示隐藏功能方法
2018/01/24 Javascript
JavaScript设计模式之调停者模式实例详解
2018/02/03 Javascript
不得不知的ES6小技巧
2018/07/28 Javascript
angularjs手动识别字符串中的换行符方法
2018/10/02 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
2020/07/26 Javascript
phpsir 开发 一个检测百度关键字网站排名的python 程序
2009/09/17 Python
python支持断点续传的多线程下载示例
2014/01/16 Python
python使用response.read()接收json数据的实例
2018/12/19 Python
Django REST framework内置路由用法
2019/07/26 Python
pyinstaller打包opencv和numpy程序运行错误解决
2019/08/16 Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
2021/03/01 Python
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
巴西婴儿用品商店:Bebe Store
2017/11/23 全球购物
Hotels.com加拿大:领先的在线住宿网站
2018/10/05 全球购物
阿德的梦教学反思
2014/02/06 职场文书
教师校本培训方案
2014/02/26 职场文书
中学生运动会新闻稿
2014/09/24 职场文书
2015年上半年信访工作总结
2015/03/30 职场文书
2015年信访维稳工作总结
2015/04/07 职场文书
部门经理助理岗位职责
2015/04/13 职场文书
晚会主持人开场白台词
2015/05/28 职场文书
2019年共青团工作条例最新版
2019/11/12 职场文书
Redis安装启动及常见数据类型
2021/04/14 Redis
详解JavaScript中的执行上下文及调用堆栈
2021/04/29 Javascript