无法使用 fetch 发送多部分,但 axios 工作正常

yuk*_*say 2 javascript forms multipartform-data fetch axios

这是我的代码:

function uploadImage(payload) {
  return fetch('/api/storage/upload/image/', {
    method: 'POST',
    headers: {
      'Content-Type': 'multipart/form-data',
      Accept: 'application/json',
      Authorization: 'Bearer <token>',
    },
    body: payload,
  });
}
function uploadImage2(payload) {
  return axios.post('/api/storage/upload/image/', payload, {
    headers: {
      'Content-Type': 'multipart/form-data',
      Accept: 'application/json',
      Authorization: 'Bearer <token>',
    },
  });
}
function test(file, meta_data) {
  var formBody = new FormData();
  formBody.set('image', file);
  formBody.set('meta_data', meta_data);

  uploadImage(formBody);
  // doesn't work
  uploadImage2(formBody);
  // works
}
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释一下我应该如何使用 fetch 发送多部分请求吗?

我用这段代码得到的错误是:400 bad request, file and meta_data are null.

The*_*ker 5

不要使用此标头:'Content-Type': 'multipart/form-data'

删除标题,它应该可以工作。

解释:

与 'Content-Type': 'multipart/form-data'一起使用时fetch,您还必须设置boundary(请求中发送的字段之间的分隔符)。

如果没有边界,接收请求的服务器将不知道字段在哪里开始和结束。

您可以自己设置边界,但最好让浏览器通过'Content-Type'完全删除标头来自动完成此操作。

以下是更多见解:使用“fetch”和“FormData”上传文件