¿Cómo seleccionar varios archivos con <input type="file">
?
¿Cómo seleccionar varios archivos con <input type="file">
?
Respuestas:
Nueva respuesta:
En HTML5 puede agregar el multiple
atributo para seleccionar más de 1 archivo.
<input type="file" name="filefield" multiple="multiple">
Respuesta anterior:
Solo puede seleccionar 1 archivo por
<input type="file" />
. Si desea enviar varios archivos, deberá utilizar varias etiquetas de entrada o utilizar Flash o Silverlight.
También existe HTML5 <input type="file" multiple />
( especificación ).
El soporte del navegador es bastante bueno en el escritorio (simplemente no es compatible con IE 9 y versiones anteriores), menos bueno en el móvil, supongo que porque es más difícil de implementar correctamente según la plataforma y la versión.
name="files[]"
Todo debería verse así:
<form enctype='multipart/form-data' method='POST' action='submitFormTo.php'>
<input type='file' name='files[]' multiple />
<button type='submit'>Submit</button>
</form>
¡Asegúrese de tener el enctype='multipart/form-data'
atributo en su <form>
etiqueta, o no podrá leer los archivos en el lado del servidor después del envío!
Este complemento de jQuery ( demostración de carga de archivos de jQuery ) lo hace sin flash, en la forma en que está usando:
<input type='file' name='files[]' multiple />
Puedes hacerlo ahora con HTML5
En esencia, usa el atributo múltiple en la entrada del archivo.
<input type='file' multiple>
.name
propiedad, por lo que el título en su ejemplo es siempre undefined
: jsfiddle.net/m5jeyeyt/1
HTML5 ha proporcionado un nuevo atributo múltiple para el elemento de entrada cuyo atributo de tipo es archivo. Por lo tanto, puede seleccionar varios archivos e IE9 y las versiones anteriores no lo admiten.
NOTA: tenga cuidado con el nombre del elemento de entrada. cuando desee cargar varios archivos, debe usar matriz y no cadena como valor del atributo de nombre.
ej: tipo de entrada = "archivo" nombre = "myPhotos []" multiple = "multiple"
y si está usando php, obtendrá los datos en $ _FILES y usará var_dump ($ _ FILES) y verá la salida y procesará Ahora puede iterar y hacer el resto
Eso es fácil ...
<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());
};
<form action="" method="post" enctype="multipart/form-data">
<input type="file" multiple name="img[]"/>
<input type="submit">
</form>
<?php
print_r($_FILES['img']['name']);
?>
Copia y pega esto en tu html:
<input type="file" id="files" name="files[]" multiple />
<output id="list"></output>
<script>
function handleFileSelect(evt) {
var files = evt.target.files; // FileList object
// files is a FileList of File objects. List some properties.
var output = [];
for (var i = 0, f; f = files[i]; i++) {
output.push('<li><strong>', escape(f.name), '</strong> (', f.type || 'n/a', ') - ',
f.size, ' bytes, last modified: ',
f.lastModifiedDate ? f.lastModifiedDate.toLocaleDateString() : 'n/a',
'</li>');
}
document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>';
}
Esto te llega, a través de mí, desde esta página web: http://www.html5rocks.com/en/tutorials/file/dndfiles/