繁体   English   中英

React-Native通过HTTP发送多部分/表单数据

[英]React-Native send multipart/form-data through HTTP

我有一个本机应用程序,需要将视频/图像发送到我的服务器。 我已经知道正常的帖子可以工作,但是当我尝试发送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部分需要内容类型标头”。 但是看来我正确设置了吗?

请帮助,还有其他类似的问题,但我的想法已经用完了。 我也曾尝试使用获取未成功。

错误消息与请求(您已设置)的内容类型标头无关,而与零件 (您未显示的内容类型标头)有关,因此我们假设它丢失了。

当您将零件添加到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 中第79行的FormData.js中完成的(其中value是您的type属性的值):

if (typeof value.type === 'string') {
    headers['content-type'] = value.type;
}

因此,当缺少type则缺少该部件的 content-type标头,然后在Android上结束于此处 ,您可以其中看到错误消息的来源。

这个确切的错误和根本原因在GitHub问题中进行了讨论。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM