fetch本机支持多文件上传吗?

时间:2017-12-10 12:03:54

标签: javascript ajax reactjs upload fetch

摘要

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

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

预期

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

错误

image

工作

此代码段工作正常:

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,
});

image

不工作

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

image

问题

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

2 个答案:

答案 0 :(得分:3)

您的代码存在问题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));    
}

我已经使用您的代码创建了一个简单的错误小提示here。您可以在此处查看其提交的帖子数据,您可以在其中查看没有上传文件。

在页面底部,您可以找到

enter image description here

我已经修正了小提琴here。您可以从服务器检查其'postt数据,其中显示我上传的两个文件的详细信息。

enter image description here

答案 1 :(得分:1)

如果您想要倍数文件,可以使用此

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
})