我有一个本机应用程序需要将视频/图像发送到我的服务器。我已经知道正常帖子可以正常工作但是当我尝试发送一个formData对象时,它似乎永远不会离开手机。这是我的代码。
// method = 'POST';
// body = new formData();
// body contains text data and image/video file
const post = (url, body, token, method) => {
let xhr = new XMLHttpRequest();
xhr.open(method, url);
xhr.setRequestHeader('Authorization', 'Bearer' + token);
xhr.setRequestHeader('Content-Type', 'multipart/form-data; boundary=---------------------------7692764ac82');
xhr.send(body);
console.log(xhr);
return xhr.response;
}
body是一个包含图像/视频的formData对象。在xhr在控制台日志中打印的对象中,_response包含"二进制FormData部分需要内容类型标题。"但似乎我把它正确设置了吗?
请帮助,还有其他类似的问题,但我已经没有想法了。我也试过使用fetch但没有成功。
答案 0 :(得分:7)
错误消息与请求(您已设置)的内容类型标头无关,它与部分的内容类型标头有关(您没有显示,所以我们必须假设它缺失了。
将部分添加到FormData
时,请勿忘记添加type
。图像示例:
const body = new FormData();
// ...
body.append('image', {
uri: 'file:///...',
type: 'image/jpeg', // <- Did you miss that one?
name: 'someName',
});
正确设置type
后,React Native运行时应为该部件添加content-type
标头。这是在v0.46.0 FormData.js
at line 79中完成的(其中value
是type
属性的值):
if (typeof value.type === 'string') {
headers['content-type'] = value.type;
}
因此,当type
丢失时,部分的content-type
标题丢失了,然后在Android上你最终here,你可以在那里查看错误消息的来源。
that GitHub issue中讨论了这个确切的错误和根本原因。