React Native 中的 Axios 不提供 Form-Data headers
Axios in React Native doesn't provide Form-Data headers
我正在尝试使用以下代码通过 Axios(版本 ^0.26.0
)在 React Native(版本 0.66.4
)中上传文件:
const formData = new FormData();
formData.append('image', {
uri: 'aFilePathProvidedByTheImagePicker',
name: 'file.jpg',
type: 'image/jpg'
});
const response = await this.axiosInstance.put('aCustomUrl', formData, {
headers: {
'Content-Type': 'multipart/form-data;',
},
});
但它总是失败,状态代码为 400。我用 Postman 尝试了请求的端点,它工作正常。
经过一些调试和比较来自 axios 和邮递员的请求后,我发现缺少 Content-Length
header。 Content-Type
中的 boundary
也没有提供。请参阅下面的屏幕截图:
邮递员:
Reicht 本机调试:
我也读到了 formData.getLengthSync()
但在 React Native 中它会导致错误 formData.getLengthSync is not a function
有没有人能解决这个问题?
根据此 post 将 axios 降级到版本 0.24.0
作为解决方法。
(出于调试目的,我使用了 fetch-api 中的构建,它按预期工作。但我更喜欢使用 axios 来使用带有请求和响应的共享实例 interceptors)
您的代码应该可以工作,但您可以尝试将 content-type 添加到 headers
"Content-Type": "multipart/form-data; boundary=" + formData .getBoundary(),
此问题已在 Axios 版本 0.27.2 中解决 (https://github.com/axios/axios/issues/4460#issuecomment-1115163147)
我正在尝试使用以下代码通过 Axios(版本 ^0.26.0
)在 React Native(版本 0.66.4
)中上传文件:
const formData = new FormData();
formData.append('image', {
uri: 'aFilePathProvidedByTheImagePicker',
name: 'file.jpg',
type: 'image/jpg'
});
const response = await this.axiosInstance.put('aCustomUrl', formData, {
headers: {
'Content-Type': 'multipart/form-data;',
},
});
但它总是失败,状态代码为 400。我用 Postman 尝试了请求的端点,它工作正常。
经过一些调试和比较来自 axios 和邮递员的请求后,我发现缺少 Content-Length
header。 Content-Type
中的 boundary
也没有提供。请参阅下面的屏幕截图:
邮递员:
Reicht 本机调试:
我也读到了 formData.getLengthSync()
但在 React Native 中它会导致错误 formData.getLengthSync is not a function
有没有人能解决这个问题?
根据此 post 将 axios 降级到版本 0.24.0
作为解决方法。
(出于调试目的,我使用了 fetch-api 中的构建,它按预期工作。但我更喜欢使用 axios 来使用带有请求和响应的共享实例 interceptors)
您的代码应该可以工作,但您可以尝试将 content-type 添加到 headers
"Content-Type": "multipart/form-data; boundary=" + formData .getBoundary(),
此问题已在 Axios 版本 0.27.2 中解决 (https://github.com/axios/axios/issues/4460#issuecomment-1115163147)