Jak wybrać wiele plików za pomocą <input type="file">
?
Jak wybrać wiele plików za pomocą <input type="file">
?
Odpowiedzi:
Nowa odpowiedź:
W HTML5 możesz dodać multiple
atrybut, aby wybrać więcej niż 1 plik.
<input type="file" name="filefield" multiple="multiple">
Stara odpowiedź:
Możesz wybrać tylko 1 plik na
<input type="file" />
. Jeśli chcesz wysłać wiele plików, będziesz musiał użyć wielu tagów wejściowych lub użyć Flasha lub Silverlight.
Jest też HTML5 <input type="file" multiple />
( specyfikacja ).
Obsługa przeglądarek jest całkiem dobra na komputerach stacjonarnych (po prostu nie jest obsługiwana przez IE 9 i wcześniejsze), mniej dobra na urządzeniach mobilnych, myślę, że trudniej jest ją poprawnie zaimplementować w zależności od platformy i wersji.
name="files[]"
Całość powinna wyglądać następująco:
<form enctype='multipart/form-data' method='POST' action='submitFormTo.php'>
<input type='file' name='files[]' multiple />
<button type='submit'>Submit</button>
</form>
Upewnij się, że masz enctype='multipart/form-data'
atrybut w swoim <form>
tagu lub nie możesz odczytać plików po stronie serwera po przesłaniu!
Ta wtyczka jQuery ( jQuery File Upload Demo ) robi to bez flasha, w formie, której używa:
<input type='file' name='files[]' multiple />
Możesz to teraz zrobić za pomocą HTML5
Zasadniczo używasz atrybutu wielokrotnego na wejściu pliku.
<input type='file' multiple>
.name
właściwości, więc tytuł w Twoim przykładzie to zawsze undefined
: jsfiddle.net/m5jeyeyt/1
HTML5 dostarczył wiele nowych atrybutów dla elementu wejściowego, którego atrybutem typu jest plik. Możesz więc wybrać wiele plików, a IE9 i poprzednie wersje tego nie obsługują.
UWAGA: uważaj na nazwę elementu wejściowego. jeśli chcesz przesłać wiele plików, jako wartość atrybutu name należy użyć tablicy, a nie łańcucha.
np. typ danych wejściowych = "plik" nazwa = "moje zdjęcia []" wiele = "wiele"
a jeśli używasz php to otrzymasz dane w $ _FILES i użyjesz var_dump ($ _ FILES) i zobacz wyjście i wykonaj przetwarzanie Teraz możesz iterować i zrobić resztę
To łatwe ...
<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());
};
<form action="" method="post" enctype="multipart/form-data">
<input type="file" multiple name="img[]"/>
<input type="submit">
</form>
<?php
print_r($_FILES['img']['name']);
?>
Skopiuj i wklej to do swojego 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>';
}
To przychodzi do Ciebie, poprzez mnie, z tej strony internetowej: http://www.html5rocks.com/en/tutorials/file/dndfiles/