真实iPhone上的rn-fetch-blob无法上传图片(本地测试)

时间:2019-06-25 23:30:28

标签: ios react-native react-native-fetch-blob

我正在使用react-native-image-picker (^0.28.0)rn-fetch-blob (^0.10.15)。 到目前为止,在使用Simulator时它可以正常工作,但是当我在真实的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"

有人知道为什么要与此模拟器有所不同吗?似乎正在发送相同的请求。

一些额外的信息,当我在Image组件中预览图像时,它也显示得很好。因此,似乎在真正的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
                            })
                        });

1 个答案:

答案 0 :(得分:0)

问题可能是您正在上传到非https网址。遇到同样的问题,并且nsAllowArbitraryLoads使其在模拟器上运行,并在实际设备上使用时出错。 必须等到它变成https