Come selezionare più file con <input type = "file">?


110

Come selezionare più file con <input type="file">?


Si tratta di javascript e html
Maschera

Intendi caricare più file in una volta (quando ne selezioni uno alla volta e fai clic su Carica)? O intendi usare ctrl + clic per selezionare più file in una finestra del browser?
cletus

2
Puoi farlo con HTML5 utilizzando l'attributo multiple sull'elemento di input. <input type = 'file' multiple = ''> Ecco un ottimo violino che lo utilizza: jsfiddle.net/0GiS0/Yvgc2
Costa

Risposte:


126

Nuova risposta:

In HTML5 puoi aggiungere l' multipleattributo per selezionare più di 1 file.

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

Vecchia risposta:

Puoi selezionare solo 1 file per <input type="file" />. Se desideri inviare più file, dovrai utilizzare più tag di input o utilizzare Flash o Silverlight.


7
Gmail utilizza Flash per farlo
Fabien Ménager,

19
Non da HTML5. C'è un attributo multiplo per il campo di input.
Costa

2
@Costa Il 20 ottobre del 2009 la maggior parte dei browser non supportava questa funzionalità e Niavlys ha già mostrato la soluzione html5 2 anni fa.
ZippyV

2
questa risposta è più antica dei dinosauri
Fai clic su Upvote

2
questo multiplo = "multiplo" non è facile da usare, l'utente medio non lo capisce, non sa nemmeno cosa fa un "pulsante ctrl" e non può selezionare file in cartelle diverse.
Jean-Paul

84

C'è anche HTML5 <input type="file" multiple />( specifica ).

Il supporto del browser è abbastanza buono su desktop (ma non supportato da IE 9 e precedenti), meno buono su dispositivi mobili, immagino perché è più difficile da implementare correttamente a seconda della piattaforma e della versione.


9
Non supportato su IE9 e precedenti :(
Ashit Vora

7
considerare l'aggiuntaname="files[]"
Wariored

22

L'intera cosa dovrebbe assomigliare a:

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

Assicurati di avere l' enctype='multipart/form-data'attributo nel <form>tag, altrimenti non puoi leggere i file sul lato server dopo l'invio!


a meno che non lo invii con un websocket o ajax
bluejayke


8

Ora puoi farlo con HTML5

In sostanza si utilizza l'attributo multiplo sull'input del file.

<input type='file' multiple>

E il supporto per questa cosa? Canisuse.com non ha le informazioni.
Hubert OG

Non ne sono sicuro, ho controllato nello stesso posto, haha.
Costa

1
FileReader non ha .nameproprietà, quindi il titolo nel tuo esempio è sempre undefined: jsfiddle.net/m5jeyeyt/1
vladkras

1

HTML5 ha fornito un nuovo attributo multiplo per l'elemento di input il cui attributo di tipo è file. Quindi puoi selezionare più file e IE9 e le versioni precedenti non lo supportano.

NOTA: fare attenzione al nome dell'elemento di input. quando vuoi caricare più file devi usare array e non string come valore dell'attributo name.

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

e se stai usando php allora otterrai i dati in $ _FILES e userai var_dump ($ _ FILES) e vedrai l'output ed eseguirai l'elaborazione Ora puoi iterare e fare il resto


1

Questo è facile ...

<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
Questo ha già una risposta chiara. Qual è la necessità di aggiungere un esempio javascript?
RightHandedMonkey

perchè è carino?
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

Copia e incolla questo nel tuo 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>';
}

Questo ti arriva, tramite me, da questa pagina web: http://www.html5rocks.com/en/tutorials/file/dndfiles/

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.