使用 Fetch 和 FormData API 上传多个文件

2024-05-15

我正在尝试使用本机Fetch https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API and FormData https://developer.mozilla.org/en-US/docs/Web/API/FormDataAPI 可以一次将多个文件上传到服务器,但我一辈子都无法让它工作。这是我所得到的:

// acceptedFiles are File objects coming from `react-dropzone`.
function handleSubmit(acceptedFiles) {
  const data = new FormData();

  for (const file of acceptedFiles) {
    data.append('files', file, file.name);
  }

  return fetch('https://example.com/api/upload', {
    method: 'POST',
    body: data,      
  });
}

但我的 Rails 服务器收到的是这样的:

Parameters: {"files"=>#
<ActionDispatch::Http::UploadedFile:0x00007feb347becc0 @tempfile=#
<Tempfile:/var/folders/kl/y1jrp7zs55sbx075jjjl3p280000gn/T/RackMultipart201
71112-6486-1ftkufy.mp4>, @original_filename="SampleVideo_1280x720_5mb.mp4",
 @content_type="video/mp4", @headers="Content-Disposition: form-data; 
name=\"files\"; filename=\"SampleVideo_1280x720_5mb.mp4\"\r\nContent-Type:
 video/mp4\r\n">}

换句话说,它看起来像files实际上只是一个文件。但是文档用于FormData说追加应该追加多个文件 https://developer.mozilla.org/en-US/docs/Web/API/FormData/append#example.

那么出了什么问题呢?


解决方案是改变files to files[]:

// acceptedFiles are File objects coming from `react-dropzone`.
function handleSubmit(acceptedFiles) {
  const data = new FormData();

  for (const file of acceptedFiles) {
    data.append('files[]', file, file.name);
  }

  return fetch('https://example.com/api/upload', {
    method: 'POST',
    body: data,      
  });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Fetch 和 FormData API 上传多个文件 的相关文章

随机推荐