收集多个输入文件以追加到FormData

时间:2018-08-17 03:47:05

标签: javascript html ajax html5 ajaxform

假设我有以下表格。

<form id="testForm">
  <input type="file" name="uploads[]"><br/>
  <input type="file" name="uploads[]"><br/>
  <input type="file" name="uploads[]"><br/>
  <input type="submit">
</form>

这是提交代码的一部分,该代码试图收集要追加到FormData的文件,但是我不知道如何正确地完成操作。

var formData = new FormData();

var fileList = $("input[name='uploads[]']");
for(var x = 0; x < fileList.length; x++) {
  formData.append('file'+x, ???);
  console.log('appended a file');
}

var request = new XMLHttpRequest();
request.open('POST', '/upload');
request.send(formData);

request.onload = function(e) {
  console.log('Request Status', request.status);
};

这是服务器代码。

app.post('/upload', function(req, res) {
  var form = new formidable.IncomingForm();
  form.parse(req, function(err, fields, files) {
    console.log('handling form upload - fields', fields);
    console.log('handling form upload - files', files);
  });
  res.send('Thank you');
});

如果可以,我希望看到输出和文件保存在/ tmp中。

1 个答案:

答案 0 :(得分:3)

您不必收集字段,因为您可以将表单本身放入FormData对象中:

var form = document.getElementById('testForm');

form.addEventListener('submit', function(e) {

  e.preventDefault();

  var request = new XMLHttpRequest();
  request.open('POST', '/upload');

  request.onload = function(e) {
    console.log('Request Status', request.status);
  };

  var formData = new FormData(form);
  request.send(formData);
});

更新

如果您需要上传多个文件,则可以在输入上使用multiple属性,而不是几个输入:

<form id="testForm">
  <input type="file" name="upload" multiple>
  <input type="submit">
</form>