JQuery – alle Dateinamen in input=’file’ abrufen

Lesezeit: 3 Minuten

Ich habe <input type="file" id="basicUploadFile" multiple="multiple"> und ich möchte alle Dateinamen in dieser Eingabe erhalten. Ich habe ein Beispiel gesehen, aber es bekommt nur den Namen der ersten Datei.

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

Wie kann ich das machen? Vielen Dank.

  • stackoverflow.com/questions/6171013/…

    – lukas.pukenis

    22. Mai 2012 um 13:37 Uhr

  • Genaues Duplikat dieser Frage: stackoverflow.com/questions/3654179/…

    – Tr1stan

    22. Mai 2012 um 13:39 Uhr

Benutzer-Avatar
kaputt

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

files wird ein FileList-Objekt sein.

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

Jetzt names ist ein Array von Strings (Dateinamen)

FileAPI-Referenz
Dateieigenschaftsreferenz

  • Gute Demonstration der .prop() und $.map() Methoden, die ich nicht kannte. 🙂

    – Richard

    22. Mai 2012 um 13:43 Uhr


  • Ja, die Unterstützung für das Mehrfachattribut erschien nur in IE10.

    – Wrack

    24. Mai 2013 um 11:35 Uhr

  • Verwenden if (window.File && window.FileList) um die Browserunterstützung zu überprüfen

    – robmcvey

    1. Oktober 2013 um 10:11 Uhr

  • Einfache Erklärung. Vielen Dank

    – Amit Gupta

    10. Februar 2014 um 12:31 Uhr

  • stackoverflow.com/questions/27898745/… …. bitte helfen Sie @wrock

    – Hitsch

    12. Januar 2015 um 9:37 Uhr


Benutzer-Avatar
Richard

jsFiddle-Demo


Sie können weiterhin auf die Dateien als FileList Sammlung ohne die Notwendigkeit einer Überbeanspruchung jQuery. Ich habe schnell eine erstellt jsFiddle demonstrieren, wie man die Informationen aus der Eingabe herausholt, indem man die verwendet FileList und File Objekte. Hier ist ein Ausschnitt:

$('#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
    }
});

  • Können Sie bitte ein wenig erklären, warum “this” anstelle von “$(this)” verwendet wird?

    – atif

    6. Februar 2013 um 6:32 Uhr

  • $(this) würde uns einfach einen jQuery-Wrapper für das Objekt bereitstellen thiswas in einigen Fällen hilfreich wäre, da es bestimmte Methoden offenlegen würde, aber in diesem Fall ist es unnötig.

    – Richard

    6. Februar 2013 um 9:24 Uhr

  • dies funktioniert nicht im IE – IE erlaubt Ihnen keinen Zugriff auf die Dateiliste.

    – Seltsamer Mann

    13. Februar 2013 um 4:55 Uhr

  • @Oddman, das ist teilweise richtig; Das Hochladen mehrerer Dateien wird nur in IE10 unterstützt, caniuse.com/#feat=forms

    – Richard

    13. Februar 2013 um 16:31 Uhr

  • Wir haben es ausgiebig auf unseren eigenen Browsern bei der Arbeit getestet und konnten in keinem der IE-Browser auf die Dateieigenschaft zugreifen 🙁

    – Seltsamer Mann

    14. Februar 2013 um 6:29 Uhr

Ich habe dies verwendet, um in der Konsole alle Dateinamen anzuzeigen:

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);
     });
});

<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; });
            }

Sie können den Prototyp von erweitern File-Objekt (zum Beispiel File.prototype.toJSON), und Sie können auf die Dateiliste von zugreifen <input ..>:

<input id="myFile" type="file">
 var file = document.getElementById('fileItem').files[0];

Weitere Informationen finden Sie in dieser Dokumentation:

https://developer.mozilla.org/en-US/docs/Web/API/FileList#Using_the_file_list

Überprüfen Sie dieses einfache Beispiel:

File.prototype.toJSON = function() {
	return {
		'lastModified'     : this.lastModified,
		'lastModifiedDate' : this.lastModifiedDate,
		'name'             : this.name,
		'size'             : this.size,
		'type'             : this.type 
	};
}

function getFiles() {
    var files = document.getElementById('myFiles').files;
    document.getElementById('result').innerHTML = '<h1>result</h1>'
      + JSON.stringify(files);
}
<input id="myFiles" type="file" multiple onchange="getFiles()" />
<pre id='result'></pre>

Viel Glück!

1228830cookie-checkJQuery – alle Dateinamen in input=’file’ abrufen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy