multiple属性必须与type="file"配合使用才生效,其他类型无效;用户可通过ctrl/cmd多选或拖拽,ios safari 16.4前不支持;javascript须用input.files(filelist)而非value读取,formdata需同key多次append()。

直接在文件输入框上加 multiple 属性就行,但必须写对位置、配对类型,否则形同虚设。
必须和 type="file" 一起用
multiple 不是通用开关,只对 <input type="file"> 生效。其他类型(比如 text、email)加了也白加。
- ✅ 正确:
<input type="file" multiple>或<input type="file" multiple> - ❌ 错误:
<input multiple>(缺 type)、<input type="text" multiple>(类型不对)、<input type="file" multiple>(布尔属性不接受值,写了反而被当成 true)
用户怎么多选?浏览器支持哪些操作
加了 multiple 后,用户就能用系统原生方式一次选多个:
- Windows:按住 Ctrl 点击多个文件;或拖拽框选一批文件
- macOS:按住 Cmd 点击多个文件
- 部分浏览器(Chrome、Edge、Firefox 桌面版)支持直接拖拽多个文件到 input 区域
注意:iOS Safari 在 16.4 版本之前基本不支持,点开仍是单选;Android 主流浏览器支持良好,但部分厂商定制系统可能限制严格。
前端读取时别用 value,要用 files
input.value 只返回第一个文件的伪造路径(如 C:\fakepath\photo.jpg),完全不能反映多选结果。
真正承载所有文件的是 input.files,它是一个只读的 FileList 对象:
- 检查数量:
input.files.length—— 用户没选时是 0,别直接取files[0] - 转成真数组处理:
Array.from(input.files),之后可用forEach、map等方法 - 每个文件是
File实例,有name、size(字节)、type(MIME)、lastModified等字段,可用于校验
上传多个文件,FormData 要同名多次 append()
后端收不到全部文件?大概率卡在这步。
- ❌ 错误写法:
formData.append('file', file)循环多次 → 多数后端(Express、Django、PHP)会覆盖,只剩最后一个 - ✅ 正确写法:
formData.append('files', file)对每个文件都调用一次,key 名保持一致 - name 建议用复数(如
files),不要带[](如files[])——后者在 PHP 中有用,但对 Express、fetch、现代框架反而易出错 - 调试时打开 Network 面板,看 Request Payload 里是否列出所有文件条目
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











