如何使用 <input type="file">
选择多个文件?
如何使用 <input type="file">
选择多个文件?
在HTML5中,您可以添加multiple
属性以选择多个文件。
<input type="file" name="filefield" multiple="multiple">
旧的回答:
每个
<input type="file" />
只能选择一个文件。如果要发送多个文件,则必须使用多个输入标签或使用 Flash 或 Silverlight。
name="filefield[]"
,以便返回数组。 - But those new buttons though..还有HTML5 <input type="file" multiple name="files[]" />
(规范)。
在桌面端,浏览器支持相当好(只是IE 9及以下版本不支持),但在移动设备上支持程度不太理想,我想这可能是因为根据平台和版本实现正确性更难。
整个事情应该看起来像:
<form enctype='multipart/form-data' method='POST' action='submitFormTo.php'>
<input type='file' name='files[]' multiple>
<button type='submit'>Submit</button>
</form>
请确保在您的<form>
标签中添加enctype='multipart/form-data'
属性,否则在提交后,服务器端将无法读取文件!
现在你可以使用HTML5来实现它
本质上,您需要在文件输入上使用多个属性。
<input type='file' multiple>
.name
属性,所以你示例中的标题始终为undefined
:http://jsfiddle.net/m5jeyeyt/1/ - vladkras这很简单...
<input type='file' multiple>
$('#file').on('change',function(){
_readFileDataUrl(this,function(err,files){
if(err){return}
console.log(files)//contains base64 encoded string array holding the
image data
});
});
var _readFileDataUrl=function(input,callback){
var len=input.files.length,_files=[],res=[];
var readFile=function(filePos){
if(!filePos){
callback(false,res);
}else{
var reader=new FileReader();
reader.onload=function(e){
res.push(e.target.result);
readFile(_files.shift());
};
reader.readAsDataURL(filePos);
}
};
for(var x=0;x<len;x++){
_files.push(input.files[x]);
}
readFile(_files.shift());
};
HTML5为文件类型的输入元素提供了新的属性multiple。因此,您可以选择多个文件,但IE9及之前的版本不支持此功能。
注意:要小心输入元素的名称。当您想上传多个文件时,应使用数组而不是字符串作为名称属性的值。
例如:
input type="file" name="myPhotos[]" multiple="multiple"
<form action="" method="post" enctype="multipart/form-data">
<input type="file" multiple name="img[]"/>
<input type="submit">
</form>
<?php
print_r($_FILES['img']['name']);
?>