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


110

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


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.


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.


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!


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>

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


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

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']);
?>

-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/

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.