Wie wähle ich mehrere Dateien mit <input type = “file”> aus?

110

Wie wähle ich mehrere Dateien mit aus <input type="file">?

Maske
quelle
Es geht um Javascript und HTML
Maske
Meinen Sie damit, mehrere Dateien gleichzeitig hochzuladen (wenn Sie jeweils eine auswählen und dann auf Hochladen klicken)? Oder möchten Sie mit Strg + Klicken mehrere Dateien in einem Browserfenster auswählen?
Cletus
2
Sie können dies mit HTML5 mithilfe des Attributs multiple für das Eingabeelement tun. <input type = 'file' multiple = ''> Hier ist eine großartige Geige, die sie nutzt: jsfiddle.net/0GiS0/Yvgc2
Costa

Antworten:

126

Neue Antwort:

In HTML5 können Sie das multipleAttribut hinzufügen , um mehr als eine Datei auszuwählen.

<input type="file" name="filefield" multiple="multiple">

Alte Antwort:

Sie können nur 1 Datei pro auswählen <input type="file" />. Wenn Sie mehrere Dateien senden möchten, müssen Sie mehrere Eingabe-Tags verwenden oder Flash oder Silverlight verwenden.

ZippyV
quelle
7
Google Mail verwendet Flash, um dies zu tun
Fabien Ménager
19
Nicht seit HTML5. Es gibt ein Mehrfachattribut für das Eingabefeld.
Costa
2
@Costa Am 20. Oktober 2009 haben die meisten Browser diese Funktion nicht unterstützt und Niavlys hat die HTML5-Lösung bereits vor 2 Jahren gezeigt.
ZippyV
2
Diese Antwort ist älter als die Dinosaurier
Klicken Sie auf Upvote
2
Dieses multiple = "multiple" ist nicht benutzerfreundlich, der durchschnittliche Benutzer versteht es nicht, weiß nicht einmal, was eine "Strg-Taste" tut, und er kann keine Dateien in verschiedenen Ordnern auswählen.
Jean-Paul
84

Es gibt auch HTML5 <input type="file" multiple />( Spezifikation ).

Die Browserunterstützung ist auf dem Desktop recht gut (nur nicht von IE 9 und früheren Versionen unterstützt), auf Mobilgeräten weniger gut, da es je nach Plattform und Version schwieriger ist, sie korrekt zu implementieren.

Niavlys
quelle
9
Wird
7
name="files[]"
Erwägen Sie das
22

Das Ganze sollte so aussehen:

<form enctype='multipart/form-data' method='POST' action='submitFormTo.php'> 
    <input type='file' name='files[]' multiple />
    <button type='submit'>Submit</button>
</form>

Stellen Sie sicher, dass Sie das enctype='multipart/form-data'Attribut in Ihrem <form>Tag haben, oder Sie können die Dateien auf der Serverseite nach dem Senden nicht lesen!

mark.inman
quelle
es sei denn, Sie senden es mit einem Websocket oder
Ajax
8

Sie können es jetzt mit HTML5 tun

Im Wesentlichen verwenden Sie das Attribut multiple für die Dateieingabe.

<input type='file' multiple>
Costa
quelle
Was ist mit der Unterstützung für diese Sache? Canisuse.com hat die Informationen nicht.
Hubert OG
Ich bin mir nicht sicher, ich habe den gleichen Ort überprüft, haha.
Costa
1
FileReader hat keine .nameEigenschaft, daher lautet der Titel in Ihrem Beispiel immer undefined: jsfiddle.net/m5jeyeyt/1
vladkras
1

HTML5 hat ein neues Attributmultiplikator für das Eingabeelement bereitgestellt, dessen Typattribut Datei ist. Sie können also mehrere Dateien auswählen, und IE9 und frühere Versionen unterstützen dies nicht.

HINWEIS: Gehen Sie vorsichtig mit dem Namen des Eingabeelements um. Wenn Sie mehrere Dateien hochladen möchten, sollten Sie Array und nicht String als Wert des Namensattributs verwenden.

Beispiel: input type = "file" name = "myPhotos []" multiple = "multiple"

und wenn Sie PHP verwenden, erhalten Sie die Daten in $ _FILES und verwenden var_dump ($ _ FILES) und sehen die Ausgabe und die Verarbeitung. Jetzt können Sie iterieren und den Rest erledigen

Arjun J Gowda
quelle
1

Das ist einfach ...

<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());
};
Francis Thiong'o
quelle
5
Dies ist bereits klar beantwortet. Was ist die Notwendigkeit, ein Javascript-Beispiel hinzuzufügen?
RightHandedMonkey
weil es schön ist?
Thomas Ludewig
0
<form action="" method="post" enctype="multipart/form-data">
<input type="file" multiple name="img[]"/>
<input type="submit">
</form>
<?php
print_r($_FILES['img']['name']);
?>
Anowar Hossain
quelle
-2

Kopieren Sie diese und fügen Sie sie in Ihr HTML ein:

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

Dies kommt durch mich von dieser Webseite zu Ihnen: http://www.html5rocks.com/en/tutorials/file/dndfiles/

Collyg
quelle