我正在使用react-native-image-picker
获取图像详细信息,并尝试在https后端服务器上传。请求不成功,并抛出网络错误。它没有建立与后端服务器的连接。问题是我发送的formdata
。如果我错过了,请建议header
和其他信息。
export const postImage = async state => {
let formData = new FormData();
formData.append('image', {
uri : state.photo.uri,
type: state.photo.type,
name : state.photo.fileName
});
const config = {
headers: {
'Content-Type': 'multipart/form-data',
Accept: "application/x-www-form-urlencoded",
'Accept': 'application/json'
},
};
try {
return $http.post('/image/save', formData, config)
.then(response => response)
.catch(error => error)
} catch(error) {
console.log(error)
}
}
环境:- Axios版本^0.19.2 -其他库版本[React 16.11.0,React Native 0.62.1]
6条答案
按热度按时间w8ntj3qf1#
Flipper有一个问题,升级到0.39.0或更高版本可以
此问题在此处跟踪:https://github.com/facebook/react-native/issues/28551
修复:https://github.com/facebook/flipper/issues/993#issuecomment-619823916
b91juud32#
这是flipper的问题。请将www.example.com中的flipper版本升级gradle.properties到0.43.0+,它将得到修复
gmxoilav3#
确保mime类型与您正在上传的文件匹配。对我来说,这是问题所在。
mzillmmw4#
我所面临的问题,这是接近你提到的是,我得到NetworkError时,使用expo-image-picker,并试图上传文件使用
axios
.它是在iOS完美工作,但不工作在Android.这里有两个独立的问题。假设我们从image-picker获取
imageUri
,然后我们将使用以下代码行从前端上传。第一个问题是
imageUri
本身。如果我们说照片路径是/user/.../path/to/file.jpg
。那么Android中的文件拾取器将给予imageUri
提供值为file:/user/.../path/to/file.jpg
,而iOS中的文件拾取器将为imageUri
提供值为file:///user/.../path/to/file.jpg
。第一个问题的解决方案是在android的
formData
中使用file://
而不是file:
。第二个问题是我们没有使用正确的mime-type。它在iOS上工作正常,但在Android上却不行。更糟糕的是,文件选择器软件包将文件的类型指定为“image”,而它没有提供正确的mime-type。
解决方案是在
type
字段中的formData
中使用适当的mime类型。例如:.jpg
文件的mime类型为image/jpeg
,.png
文件的mime类型为image/png
。我们不需要手动操作。相反,您可以使用一个非常有名的npm包,名为mime。最终工作溶液为:
Original Answer - forums expo
svgewumm5#
更改此行:form_data.append('image',data);
To form_data.append('image ',JSON.stringify(data));
其中数据来自图像拾取器。
从https://github.com/react-native-image-picker/react-native-image-picker/issues/798
您需要将此uesCleartextTraffic=“true”添加到目录android/app/src/main/AndroidManifest.xml中的AndroidManifest.xml文件
〈application... android:usesCleartextTraffic=“true”〉然后,由于问题与鳍状网络.
initializeFlipper(this,getReactNativeHost().getReactInstanceManager())
在这个文件/android/app/src/main/java/com/{your_project}/MainApplication.java
另外,注解掉文件android/app/src/debug/java/com/**/ www.example.com中的第43行ReactNativeFlipper.java
line43:builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
sqxo8psd6#
其他答案中的问题都没有引起我的问题,但在深入研究Axios错误响应后,我发现Nginx响应错误
413 Request Entity Too Large
。将
client_max_body_size 50M
添加到nginx.conf
文件的http部分解决了这个问题。