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


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

    一,需求分析

        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('保存成功!地址如下:
    ' + result);
    34                 }).catch(function(error) {
    35                      console.log('error', error);
    36                     // alert('保存失败!
    ' + 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 files
    28 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: uploadProgress
    40 }).promise.then((response) => {
    41     if (response.statusCode == 200) {
    42       console.log('FILES UPLOADED!'); // response.statusCode, response.headers, response.body
    43     } else {
    44       console.log('SERVER ERROR');
    45     }
    46   })
    47   .catch((err) => {
    48     if(err.description === "cancelled") {
    49       // cancelled by user
    50     }
    51     console.log(err);
    52   });
  • 相关阅读:
    死磕 java线程系列之自己动手写一个线程池(续)
    Spring Boot (十): Spring Boot Admin 监控 Spring Boot 应用
    opencv之为图像添加边界
    协作,才能更好的中断线程
    Java并发——线程池Executor框架
    神经网络dropout
    xgboost
    物体检测-毕业设计项目回顾
    计算机网络-TCP连接
    gbdt推导和代码
  • 原文地址:https://www.cnblogs.com/jackson-yqj/p/9554611.html
Copyright © 2020-2023  润新知