0

我正在react-native-image-picker (^0.28.0)rn-fetch-blob (^0.10.15). 到目前为止,它在使用模拟器时工作,但是当我在真正的 iPhone 上使用它时,图像没有上传,它无法上传,并出现以下错误,该错误被承诺捕获。

"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
                            })
                        });
4

2 回答 2

0

问题可能是您正在上传到非 https 网址。有同样的问题,nsAllowArbitraryLoads 使它在模拟器上工作,并在真实设备上使用它时出错。不得不等到变成https

于 2019-06-26T09:11:49.840 回答
0

这似乎不是 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

于 2021-05-22T11:09:06.440 回答