2012-05-22 17 views
27

Tengo <input type="file" id="basicUploadFile" multiple="multiple"> y deseo obtener todos los nombres de archivo dentro de esta entrada. He visto un ejemplo, pero solo recibe el nombre del primer archivo.JQuery: obtenga todos los nombres de archivo dentro de la entrada = 'archivo'

$ ('#basicUploadFile').live ('change', function() { 
    alert($ ('#basicUploadFile').val()); 
}); 

¿Cómo puedo hacer esto? Gracias.

+2

http://stackoverflow.com/questions/6171013/javascript-get-number- of-files-and-their-filenames-from-input-multiple-elemen –

+2

Duplicado exacto de esta pregunta: http://stackoverflow.com/questions/3654179/retrieving-file-names-out-of-a-multi- file-upload-control-with-javascript – Tr1stan

Respuesta

63
var files = $('#basicUploadFile').prop("files") 

files habrá un objeto FileList.

var names = $.map(files, function(val) { return val.name; }); 

Ahora names es una matriz de cadenas (nombres de archivo)

FileAPI reference
files property reference

+3

Buena demostración de los métodos '.prop()' y '$ .map()' que no conocía. :) – Richard

+1

Esto no funciona en IE. – Oddman

+2

Sí, el soporte para el atributo múltiple solo apareció en IE10. – wrock

9

jsFiddle Demo


Todavía se puede acceder a los archivos como una colección FileList sin el necesidad de usar en exceso jQuery. Creé un jsFiddle rápido que demuestra cómo obtener la información de la entrada usando los objetos FileList y File. Aquí hay un fragmento:

$('#basicUploadFile').live('change', function() 
{ 
    for (var i = 0; i < this.files.length; i++) 
    { 
     alert(this.files[i].name); 
     alert(this.files.item(i).name); // alternatively 
    } 
}); 
+0

¿Puedes explicar un poco ¿Por qué el uso de "this" en lugar de "$ (this)" – atif

+1

'$ (this)' simplemente nos daría un contenedor jQuery para el objeto 'this', que en algunos casos sería útil ya que expondría ciertos métodos, Sin embargo, en este caso, no es necesario. – Richard

+0

esto no funciona en IE - IE no le permite acceder a la lista de archivos. – Oddman

0
<input name="selectAttachment" id="selectAttachment" type="file" multiple="multiple"> 
<button class="btn btn-default" onclick="uploadAttachment()" type="submit">Upload</button> 


function uploadAttachment() { 
       debugger; 
       var files = $('#selectAttachment').prop('files'); 
       var names = $.map(files, function (val) { return val.name; }); 
      } 
1

que utiliza esto para mostrar en la consola de todos los nombres de los archivos:

var input_file = $("#input_file"); 
input_file.on("change", function() { 
    var files = input_file.prop("files") 
    var names = $.map(files, function (val) { return val.name; }); 
    $.each(names, function (i, name) { 
      console.log(name); 
    }); 
}); 
Cuestiones relacionadas