如何实现表单多文件上传?已设置multiple但仅收到单个文件
表单多文件上传仅收到单个文件的修复方案
问题
HTML文件输入框已设置multiple="multiple",可选择多个文件,但提交后邮箱仅收到单个文件。
修复步骤
1. 修正HTML文件输入框的name属性
将文件输入框的name="image"改为name="image[]",让PHP能以数组形式接收多个文件:
<div class="form-group"> <label for="name"> Lisa manusesse fail (Max 25mb):</label> <input type="file" class="form-control" id="image" name="image[]" multiple="multiple" required> </div>
说明:如果name不带[],PHP只会获取到最后一个选中的文件;添加[]后,PHP会将所有选中文件存入数组。
2. 更新PHP处理代码中的附件字段
修改attachFiles方法的参数,匹配前端的数组字段名:
// 原代码 // $pp->attachFiles(['image']); // 修改为 $pp->attachFiles(['image[]']);
3. 确认JS代码无需调整
原JS中使用new FormData(this)可以正确收集所有选中的文件,保持原有逻辑即可:
var formdata = new FormData(this); $.ajax({ type: "POST", url: 'handler.php', data: formdata, success: after_form_submitted, dataType: 'json', processData: false, contentType: false, cache: false });
原理说明
- 前端通过
name="image[]"标记该字段为多文件数组,告知服务器需要接收多个文件 - PHP端的FormHandler库通过
attachFiles(['image[]'])识别这个数组字段,将所有选中的文件添加为邮件附件
内容的提问来源于stack exchange,提问作者Ragnar Uus
相关产品推荐
相关产品推荐

