详解react-native-fs插件的使用以及遇到的坑
程序员文章站
2024-04-02 18:07:16
react-native-fs插件是文件对上传和下载时使用的,ios和android都可使用,file upload (ios only)。
安装命令:
n...
react-native-fs插件是文件对上传和下载时使用的,ios和android都可使用,file upload (ios only)。
安装命令:
npm install react-native-fs --save //注意:如果react native版本是<0.40安装,使用此标签: npm install react-native-fs@2.0.1-rc.2 --save
安装后执行:
react-native link react-native-fs
在android/app/src/main/androidmanifest.xml,里添加android读写文件的权限
<uses-permission android:name="android.permission.write_external_storage"/> <uses-permission android:name="android.permission.read_external_storage" />
进行完上述安装操作后,可以使用这个插件的各种方法,每个方法的具体使用例子,请看链接:。在项目里我需要下载图片文件,并获得下载到本地后的图片路径,然后显示图片。所以使用到downloadfile方法。封装了一个可调用的服务,代码如下:
downloadfile(imageid, cookie, callback) { 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里传入,代码如下:
_applogin(username, password, callback){ 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里传入,代码如下:
downloadfile(imageid, cookie, callback) { 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") } },
接下来项目写到上传文件的功能时,继续补充上传功能...
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: 新手必看:如何谨防自己在网赚之路被坑
推荐阅读
-
详解react-native-fs插件的使用以及遇到的坑
-
详解Mybatis逆向工程中使用Mysql8.0版本驱动遇到的问题
-
Grails中使用Spring Security遇到的坑
-
project生成aar文件并且在另一个project中使用遇到的坑和解决方案
-
Indri使用会遇到的坑和BUG
-
iOS11适配 以及会遇到的坑
-
SSD配置和训练以及遇到的坑
-
分享使用maven过程中遇到的问题,以及解决方案 博客分类: 开发环境 maventomcatsnapshot
-
使用android studio 来开发hello world app的时候,遇到的一些坑。 博客分类: Java android
-
使用PHP json_decode可能遇到的坑与解决方法