收集多个输入文件以附加到 FormData
collect multiple inputs file to append to FormData
假设我有以下表格。
<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 中。
您不必收集字段,因为您可以将表单本身放入 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>
假设我有以下表格。
<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 中。
您不必收集字段,因为您可以将表单本身放入 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>