我将使用react-native-image-picker (^0.28.0)
与rn-fetch-blob (^0.10.15)
一起使用。到目前为止,它在使用模拟器时起作用,但是当我在Real iPhone上使用它时,图像没有上传,它无法上传下载Promise的以下错误。
"Error: Could not connect to the server."
(是的,服务器正在启动并运行(
如果您看到了这一点,您可能会认为这是一个后端问题,但其他请求在真实设备上正常工作,这是唯一有问题的问题。发送的图像请求是:
{
data: "RNFetchBlob-file:///var/mobile/Containers/Data/Application/843A96A1-0000-40D3-B50F-95D69B94B87A/tmp/5D22283B-2014-4E9E-AC3E-AE677D91A366.jpg"
filename: "IMG_6834.jpg"
name: "pictures"
type: "image/jpeg"
}
与模拟器设备和我的iPhone的唯一区别是数据路径。模拟器上的位置就像"RNFetchBlob-file:///Users/marian-mac/Library/Developer/CoreSimulator/Devices/....etc"
任何想法为什么应该与模拟器有所不同?它似乎正在发送相同的请求。
一些额外的信息,当我在图像组件中预览图像时,它也显示得很好。因此,似乎在真正的iPhone上的路径是正确的。
这是上传图像
的方法uploadPicture: function(data, token) {
return RNFetchBlob.fetch('POST', Constants.baseUrl + '/picture', {
Authorization: "Bearer " + token,
'Content-Type': 'multipart/form-data;boundary=***BOUNDARY***'
}, data);
},
这就是我构建图片请求数组的方式,this.state.images包含图像挑选数据。
this.state.images.forEach((image) => {
reqData.push({
data: image.imageFile,
filename: image.fileName.split('.')[0] + '.jpg',
name: 'pictures',
type: image.type
})
});
问题可能是您要上传到非HTTPS URL。遇到了同样的问题,NsallowArbitraryloads使其在模拟器上起作用,并在真实设备上使用它时会出现错误。必须等到它变成https
它似乎不是HTTP或HTTPS的问题。(我的是http(
我在此路径上有一个文件: filepath =/var/mobile/Containers/Data/Application/F8F06A2A-C04D-4B6D-A316-F879E144366B/Documents/test.wav
我尝试了RNFetchBlob.wrap(filePath)
,但没有用。因此,我尝试将此文件添加到iOS项目的资产和使用RNFetchBlob.wrap(RNFetchBlob.fs.asset('test.wav'))
中。瞧,它有效。
结果,filepath