我使用的是Android模拟器sdk33。我正在尝试将图像从我的 React Native 应用程序上传到我的服务器,该服务器能够处理图像上传。我正在使用 expo-image-picker 从用户那里获取图像。当我发送带有文件数组主体的 post 请求时,我收到一条错误消息:
[TypeError: Body not allowed for GET or HEAD requests]
这会导致根本不会调用我的服务器。
我在此应用程序中向我的服务器发出了其他 GET 和 POST 请求,因此我知道我的 API 不是问题。
这是我的按钮“上传图像”调用的函数,它应该执行发布请求和所有操作。
const uploadPhoto = async () => {
try{
await ImagePicker.requestMediaLibraryPermissionsAsync()
let files = await ImagePicker.launchImageLibraryAsync({
mediaTypes: ImagePicker.MediaTypeOptions.Images,
quality: 1,
allowsMultipleSelection: true
})
if (!files.canceled) {
const filelist = new FormData();
for (let i = 0; i < files.length; i++) {
filelist.append("photos", files[i].assets[0].uri);
}
const res = await fetch(`${API}/ad/upload`, {
headers: {
'method': 'POST',
'Content-type': 'multipart/form-data',
Authorization: `Bearer: ${user.token}`
},
body: {filelist}
})
console.log(res)
}
} catch(err) {
console.log(err)
}
};
值得注意的是,axios post 也会发生同样的事情 - 我只是收到一个简单的“网络错误”消息。
可能是因为你的
headers
。尝试将 method
从标题中移出,如下所示:
const res = await fetch(`${API}/ad/upload`, {
method: 'POST',
headers: {
'Content-Type': 'multipart/form-data',
'Authorization': `Bearer ${user.token}`
},
body: filelist
});
另外,我认为你需要直接传递
filelist
,因为它是表单数据。