详解react-native-fs插件的使用以及遇到的坑

前端之家收集整理的这篇文章主要介绍了详解react-native-fs插件的使用以及遇到的坑前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

react-native-fs插件文件上传和下载时使用的,iOS和android都可使用,File upload (iOS only)。

安装命令:

标签: npm install react-native-fs@2.0.1-rc.2 --save

安装后执行

在android/app/src/main/AndroidManifest.xml,里添加android读写文件的权限

 

进行完上述安装操作后,可以使用这个插件的各种方法,每个方法的具体使用例子,请看链接https://github.com/itinance/react-native-fs。在项目里我需要下载图片文件,并获得下载到本地后的图片路径,然后显示图片。所以使用到downloadFile方法。封装了一个可调用的服务,代码如下:

const downloadDest = `${RNFS.DocumentDirectoryPath}/${((Math.random() * 1000) | 0)}.jpg`; var formUrl = CommonSvc.baseURL + '/api/image/0/' + imageId; //var formUrl = 'http://lorempixel.com/400/200/'; const options = { fromUrl: formUrl,toFile: downloadDest,background: true,headers: { 'Cookie': cookie //需要添加验证到接口要设置cookie },begin: (res) => { //console.log(res); },progress: (res) => { //console.log(res); } }; try { const ret = RNFS.downloadFile(options); ret.promise.then(res => { //callback(null,Platform.OS === 'android' ? downloadDest : 'file://' + downloadDest) callback(null,'file://' + downloadDest) }).catch(err => { callback(err) }); } catch (e) { callback("error") }

},

在实现这个功能到时候,android下载到本地的图片显示不出来,这个查阅了相关资料后,原因是android调用插件,需要添加接口验证信息(如果接口是需要验证的情况下),这个问题怎么解决

调用react-native-fs插件时,如果数据的接口是需要验证信息的,在android上运行报错,而在iOS上运行没问题。原因是因为接口是有验证信息的,而调用这个插件时没有传入,在iOS上会自动加上验证信息,而 android需要手动设置。

错误解决方法

1.在调用登录接口时,保存下cookie(cookie在response里),在调用react-native-fs时放在headers里传入,代码如下:

fetch(commonSvc.baseURL + '/account/app-login',{ method: 'POST',headers: { 'Accept': 'application/json','Content-Type': 'application/json' },body: JSON.stringify({ UserName: userName,Password: password }) }).then( (response) => { if (response.ok) { return response; } else { var message; switch (response.status) { case 710: message = LanguageChooseSvc.strings['api_common_' + 710]; break; case 711: message = LanguageChooseSvc.strings['api_common_' + 711]; break; case 400: message = LanguageChooseSvc.strings['api_common_' + 400]; break; default: message = commonSvc.httpErrorMessage; break; } throw {message: message}; } } ).then( (responseJson) => { callback(null,responseJson); } ).catch( (error) => { callback(error.message); } );

},

2.在调用react-native-fs时放在headers里传入,代码如下:

接下来项目写到上传文件功能时,继续补充上传功能...

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

猜你在找的JavaScript相关文章