继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

React Native之本地文件系统访问组件react-native-fs的介绍与使用

湖上湖
关注TA
已关注
手记 276
粉丝 85
获赞 377

一,需求分析

    1,需要将图片保存到本地相册;

    2,需要创建文件,并对其进行读写 删除操作。 

二,简单介绍

react-native-fs支持以下功能(ios android):

  • 将文本写入本地 txt

  • 读取txt文件内容

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

  • 删除文件

  • 下载文件(图片、文件、视频、音频)

  • 上传文件 only iOS

三,使用实例

    3.1 将文本写入本地 txt

复制代码

 1  let rnfsPath = Platform.OS === 'ios' ? RNFS.LibraryDirectoryPath : RNFS.ExternalDirectoryPath 2         const path = rnfsPath + '/test_' +uid + '.txt'; 3         //write the file 4         RNFS.writeFile(path, test, 'utf8') 5             .then((success) => { 6                 alert('path=' + path); 7             }) 8             .catch((err) => { 9                console.log(err)10 });

复制代码

    3.2 读取txt文件内容

复制代码

 1  let rnfsPath = Platform.OS === 'ios'? RNFS.LibraryDirectoryPath:RNFS.ExternalDirectoryPath 2         const path =  rnfsPath+ '/keystore_'+.uid+'.txt'; 3         //alert(RNFS.CachesDirectoryPath) 4         return RNFS.readFile(path) 5             .then((result) => { 6                 Toast.show('读取成功') 7             }) 8         .catch((err) => { 9            //alert(err.message);10             Toast.show('读取失败');11         });

复制代码

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

复制代码

 1 /*在已有的txt上添加新的文本*/ 2     appendFile() { 3       let rnfsPath = Platform.OS === 'ios'? RNFS.LibraryDirectoryPath:RNFS.ExternalDirectoryPath 4          const path =  rnfsPath+ '/test_'+uid+'.txt'; 5         return RNFS.appendFile(path, '新添加的文本', 'utf8') 6             .then((success) => { 7                 console.log('success'); 8             }) 9             .catch((err) => {10                 console.log(err.message);11             });12     }

复制代码

    3.4 删除文件

复制代码

 1  /*删除文件*/ 2     deleteFile() { 3         // create a path you want to delete 4         let rnfsPath = Platform.OS === 'ios'? RNFS.LibraryDirectoryPath:RNFS.ExternalDirectoryPath 5         const path =  rnfsPath+ '/test_'+uid+'.txt'; 6         return RNFS.unlink(path) 7             .then(() => { 8                //alert('FILE DELETED'); 9             })10             .catch((err) => {11                 //console.log(err.message);12             });13     }

复制代码

3.5 下载文件(图片、文件、视频、音频)

复制代码

 1 export const downloadFile =(uri,callback)=> { 2     if (!uri) return null; 3     return new Promise((resolve, reject) => { 4         let timestamp = (new Date()).getTime();//获取当前时间错 5         let random = String(((Math.random() * 1000000) | 0))//六位随机数 6         let dirs = Platform.OS === 'ios' ? RNFS.LibraryDirectoryPath : RNFS.ExternalDirectoryPath; //外部文件,共享目录的绝对路径(仅限android) 7         const downloadDest = `${dirs}/${timestamp+random}.jpg`; 8         //const downloadDest = `${dirs}/${timestamp+random}.zip`; 9          //const downloadDest = `${dirs}/${timestamp+random}.mp4`;10           //const downloadDest = `${dirs}/${timestamp+random}.mp3`;11         const formUrl = uri;12         const options = {13             fromUrl: formUrl,14             toFile: downloadDest,15             background: true,16             begin: (res) => {17                 // console.log('begin', res);18                 // console.log('contentLength:', res.contentLength / 1024 / 1024, 'M');19             },20 progress: (res) => {21                 let pro = res.bytesWritten / res.contentLength;22                callback(pro);//下载进度23             }24 25         };26         try {27             const ret = RNFS.downloadFile(options);28             ret.promise.then(res => {29                 // console.log('success', res);30                 // console.log('file://' + downloadDest)31                 var promise = CameraRoll.saveToCameraRoll(downloadDest);32                 promise.then(function(result) {33                    // alert('保存成功!地址如下:\n' + result);34                 }).catch(function(error) {35                      console.log('error', error);36                     // alert('保存失败!\n' + error);37                 });38                 resolve(res);39             }).catch(err => {40                 reject(new Error(err))41             });42         } catch (e) {43             reject(new Error(e))44         }45 46     })47 48 }

复制代码

3.6 上传文件 only iOS(官网实例)

复制代码

 1 var uploadUrl = 'http://requestb.in/XXXXXXX';  // For testing purposes, go to http://requestb.in/ and create your own link 2 // create an array of objects of the files you want to upload 3 var files = [ 4   { 5     name: 'test1', 6     filename: 'test1.w4a', 7     filepath: RNFS.DocumentDirectoryPath + '/test1.w4a', 8     filetype: 'audio/x-m4a' 9   }, {10     name: 'test2',11     filename: 'test2.w4a',12     filepath: RNFS.DocumentDirectoryPath + '/test2.w4a',13     filetype: 'audio/x-m4a'14   }15 ];16 17 var uploadBegin = (response) => {18   var jobId = response.jobId;19   console.log('UPLOAD HAS BEGUN! JobId: ' + jobId);20 };21 22 var uploadProgress = (response) => {23   var percentage = Math.floor((response.totalBytesSent/response.totalBytesExpectedToSend) * 100);24   console.log('UPLOAD IS ' + percentage + '% DONE!');25 };26 27 // upload files28 RNFS.uploadFiles({29   toUrl: uploadUrl,30   files: files,31   method: 'POST',32   headers: {33     'Accept': 'application/json',34   },35   fields: {36     'hello': 'world',37   },38   begin: uploadBegin,39   progress: uploadProgress40 }).promise.then((response) => {41     if (response.statusCode == 200) {42       console.log('FILES UPLOADED!'); // response.statusCode, response.headers, response.body43     } else {44       console.log('SERVER ERROR');45     }46   })47   .catch((err) => {48     if(err.description === "cancelled") {49       // cancelled by user50     }51     console.log(err);52   });

复制代码

原文出处:https://www.cnblogs.com/jackson-zhangjiang/p/9554611.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP