假设我有以下表格。
<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中。
答案 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>