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.ExternalDirectoryPath2 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.ExternalDirectoryPath2 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 link2 // 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 });
以上是 React Native之本地文件系统访问组件react-native-fs的介绍与使用 的全部内容, 来源链接: utcz.com/z/382537.html