javascript - 具有多个文件输入的表单
问题描述
我有一个动态表单的应用程序,可以同时上传给不同的人。
每个人都有不同的输入文件,并且可以添加更多 2 个动态输入。
<div id="InputsWrapper_1">
<div><input type="file" name="arquivoDep_1_[]" id="1" value="" multiple><a href="#" class="removeclass"></a></div>
</div>
<div id="AddMoreFileId_1">
<a href="#" id="AddMoreFileBox_1" class="btn btn-info adiciona">Add field</a><br><br>
</div>
<div id="lineBreak"></div>
<div id="InputsWrapper_2">
<div><input type="file" name="arquivoDep_2_[]" id="2" value="" multiple><a href="#" class="removeclass"></a></div>
</div>
<div id="AddMoreFileId_2">
<a href="#" id="AddMoreFileBox_2" class="btn btn-info adiciona">Add field</a><br><br>
</div>
当我提交此表格时,我有此回复
<input id="1" type="file" name="arquivoDep_1_[]" value="" multiple="">
<input type="file" name="arquivoDep_1_[]">
<input id="2" type="file" name="arquivoDep_2_[]" value="" multiple="">
<input type="file" name="arquivoDep_2_[]">
没关系。两个人的两个文件。
我怎样才能附加这些文件..有点像
$.each($("input[type=file]"), function(i, obj)
{
$.each(obj.files,function(j, file)
{
form_data.append('arquivoDep_x_[]', file, file.name);
})
});
解决方案
首先我们在 2020 年,检查你是否真的需要 jQuery:http: //youmightnotneedjquery.com/
然后你可以使用这样的多部分形式的数据:
<script type="text/javascript">
const formElement = document.querySelector('form');
formElement.addEventListener('submit', e => {
e.preventDefault();
const request = new XMLHttpRequest();
const formData = new FormData();
const formElements = formElement.elements;
const data = {};
for (let i = 0; i < formElements.length; i++) {
const currentElement = formElements[i];
if (!['submit', 'file'].includes(currentElement.type)) {
data[currentElement.name] = currentElement.value;
} else if (currentElement.type === 'file') {
if (currentElement.files.length === 1) {
const file = currentElement.files[0];
formData.append(`files.${currentElement.name}`, file, file.name);
} else {
for (let i = 0; i < currentElement.files.length; i++) {
const file = currentElement.files[i];
formData.append(`files.${currentElement.name}`, file, file.name);
}
}
}
}
formData.append('data', JSON.stringify(data));
request.open('POST', 'https://example.com');
request.send(formData);
});
</script>
推荐阅读
- php - Symfony - EventListener 中不同状态的多个参数
- c++ - 定长char数组用短字符串初始化时,剩余空间如何初始化?
- c - 使用 aws iot c sdk 的 Cmake 问题 ota_pal_posix
- ios - React Native 初始项目不适用于 IOS
- javascript - 更新深层嵌套 .map 中的状态值
- javascript - 如何设置正确的范围以在 JavaScript 中调用 Google People API?
- php - Laravel 的问题,一旦使用 PHP-FPM 和 NGINX 启动
- .net-core - 将 Visual Studio 2019 连接到 xampp
- zabbix - zabbix 触发器表达式:count not 60 over 24hours/1440minutes
- docker - 如何在 docker swarm 服务中更新 ca 证书