fetch 原生支持多文件上传吗?

Does fetch support multiple file upload natively?

总结

我正在尝试使用 javascript 正确设置我的 FormData

我需要能够上传 jpg/png,但我以后可能需要使用 fetch 上传一些其他文件类型 pdf/csv

预计

我希望它将数据附加到表单

错误

工作

这段代码运行良好:

const formData = new FormData(document.querySelector('form'));
formData.append("extraField", "This is some extra data, testing");

return fetch('http://localhost:8080/api/upload/multi', {
    method: 'POST',
    body: formData,
});

不工作

const formData = new FormData();
const input = document.querySelector('input[type="file"]');
formData.append('files', input.files);

问题

fetch 原生支持多文件上传吗?

您的代码的问题在行formData.append('files', input.files); 取而代之的是,您应该上传每个文件 运行 一个带有唯一键的循环,就像这样

const fileList = document.querySelector('input[type="file"]').files;
    for(var i=0;i<fileList.length;i++) {
    formData.append('file'+i, fileList.item(i));    
}

我用你的代码创建了一个简单的错误 fiddle here。您可以在此处查看其提交的 post 数据,您可以在此处看到未上传任何文件。

在页面底部您可以找到

.

我已经用修复程序更正了 fiddle here。您可以从服务器查看它的post数据,其中显示了我上传的两个文件的详细信息。

如果你想要倍数文件,你可以使用这个

var input = document.querySelector('input[type="file"]')

var data = new FormData()
for (const file of input.files) {
  data.append('files',file,file.name)
}

fetch('http://localhost:8080/api/upload/multi', {
  method: 'POST',
  body: data
})