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" />
进行完上述安装操作后,可以使用这个插件的各种方法,每个方法的具体使用例子,请看链接:https://github.com/itinance/react-native-fs。在项目里我需要下载图片文件,并获得下载到本地后的图片路径,然后显示图片。所以使用到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
# 使用
# reactnative
# react-native-fs实现文件下载、文本存储的示例代码
# 放在
# 上传
# 是因为
# 是有
# 而在
# 这个问题
# 到时候
# 相关资料
# 写到
# 报错
# 装了
# 解决方法
# 里我
# 使用这个
# 上会
# 大家多多
# 上传文件
# 下载图片
# 情况下
# 不出来
相关文章:
如何高效利用200m空间完成建站?
建站主机空间推荐 高性价比配置与快速部署方案解析
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
建站上市公司网站建设方案与SEO优化服务定制指南
制作门户网站的参考文献在哪,小说网站怎么建立?
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
建站之星后台管理:高效配置与模板优化提升用户体验
子杰智能建站系统|零代码开发与AI生成SEO优化指南
天津个人网站制作公司,天津网约车驾驶员从业资格证官网?
,有什么在线背英语单词效率比较高的网站?
成都响应式网站开发,dw怎么把手机适应页面变成网页?
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
如何快速搭建高效可靠的建站解决方案?
临沂网站制作企业,临沂第三中学官方网站?
如何通过多用户协作模板快速搭建高效企业网站?
,柠檬视频怎样兑换vip?
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
一键网站制作软件,义乌购一件代发流程?
网站制作企业,网站的banner和导航栏是指什么?
如何在阿里云高效完成企业建站全流程?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
建站主机是否等同于虚拟主机?
七夕网站制作视频,七夕大促活动怎么报名?
ui设计制作网站有哪些,手机UI设计网址吗?
PHP正则匹配日期和时间(时间戳转换)的实例代码
如何安全更换建站之星模板并保留数据?
家庭建站与云服务器建站,如何选择更优?
如何在云虚拟主机上快速搭建个人网站?
常州企业建站如何选择最佳模板?
XML的“混合内容”是什么 怎么用DTD或XSD定义
如何快速搭建高效WAP手机网站吸引移动用户?
早安海报制作网站推荐大全,企业早安海报怎么每天更换?
南平网站制作公司,2025年南平市事业单位报名时间?
详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
建站之星如何通过成品分离优化网站效率?
如何在宝塔面板中创建新站点?
如何获取上海专业网站定制建站电话?
如何通过免费商城建站系统源码自定义网站主题与功能?
如何用腾讯建站主机快速创建免费网站?
制作网站的过程怎么写,用凡科建站如何制作自己的网站?
,交易猫的商品怎么发布到网站上去?
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
建站主机类型有哪些?如何正确选型
建站之星展会模版如何一键下载生成?
Android自定义控件实现温度旋转按钮效果
如何通过宝塔面板实现本地网站访问?
如何快速配置高效服务器建站软件?
*请认真填写需求信息,我们会在24小时内与您取得联系。