<İnput type = "file"> ile birden çok dosya nasıl seçilir?


110

İle birden fazla dosya nasıl seçilir <input type="file">?


Javascript ve html hakkında
Maske

Tek seferde birden fazla dosya yüklemeyi mi kastediyorsunuz (her seferinde birini seçip ardından yükle'yi tıkladığınızda)? Yoksa bir tarayıcı penceresinde birkaç dosya seçmek için ctrl + tıklama kullanmayı mı kastediyorsunuz?
cletus

2
Bunu, giriş öğesindeki çoklu özniteliği kullanarak HTML5 ile yapabilirsiniz. <input type = 'file' multiple = ''> İşte onu kullanan harika bir keman: jsfiddle.net/0GiS0/Yvgc2
Costa

Yanıtlar:


126

Yeni cevap:

HTML5'te, multiple1'den fazla dosya seçmek için öznitelik ekleyebilirsiniz .

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

Eski cevap:

Her biri için yalnızca 1 dosya seçebilirsiniz <input type="file" />. Birden fazla dosya göndermek istiyorsanız, birden çok giriş etiketi kullanmanız veya Flash veya Silverlight kullanmanız gerekecektir.


7
Gmail bunu yapmak için Flash kullanıyor
Fabien Ménager

19
HTML5'ten beri değil. Giriş alanı için birden çok özellik vardır.
Costa

2
@Costa 20 Ekim 2009'da çoğu tarayıcı bu özelliği desteklemedi ve Niavlys html5 çözümünü 2 yıl önce zaten gösterdi.
ZippyV

2
bu cevap dinozorlardan daha eskidir
2013

2
this multiple = "multiple" kullanıcı dostu değildir, ortalama kullanıcı bunu anlamaz, "ctrl butonunun" ne yaptığını bile bilmiyor ve farklı klasörlerdeki dosyaları seçemez.
Jean-Paul

84

Ayrıca HTML5 <input type="file" multiple />( spesifikasyon ) da var.

Tarayıcı desteği masaüstünde oldukça iyi (sadece IE 9 ve öncesi tarafından desteklenmiyor), mobil cihazlarda daha az iyi, sanırım platforma ve sürüme bağlı olarak doğru şekilde uygulanması daha zor olduğu için.


9
IE9 ve öncesinde desteklenmez :(
Ashit Vora

7
eklemeyi düşününname="files[]"
2018

22

Her şey şöyle görünmeli:

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

Etiketinizde enctype='multipart/form-data'özniteliğe sahip olduğunuzdan emin olun <form>, yoksa gönderdikten sonra sunucu tarafındaki dosyaları okuyamazsınız!


bir websocket veya ajax ile göndermediğiniz sürece
bluejayke


8

Bunu şimdi HTML5 ile yapabilirsiniz

Özünde, dosya girdisinde çoklu özniteliği kullanırsınız.

<input type='file' multiple>

Bu şey için destek ne olacak? Canisuse.com bu bilgilere sahip değil.
Hubert OG

Emin değilim, aynı yeri kontrol ettim, haha.
Costa

1
FileReader yok .namesizin örnekte başlık her zaman bu yüzden, mülkiyet undefined: jsfiddle.net/m5jeyeyt/1
vladkras

1

HTML5, type özniteliği file olan girdi öğesi için yeni öznitelik çoklu sağladı. Böylece birden fazla dosya seçebilirsiniz ve IE9 ve önceki sürümler bunu desteklemez.

NOT: giriş öğesinin adına dikkat edin. Birden fazla dosya yüklemek istediğinizde, name özniteliğinin değeri olarak dizeyi değil dizi kullanmanız gerekir.

örn: input type = "dosya" name = "myPhotos []" multiple = "multiple"

ve eğer php kullanıyorsanız, veriyi $ _FILES dosyasında alacak ve var_dump ($ _ FILES) kullanacaksınız ve çıktıyı görüp işleme yapacaksınız Şimdi tekrar tekrar yapabilir ve gerisini yapabilirsiniz


1

Bu kolay ...

<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
Bu zaten net bir şekilde cevaplanmıştır. Bir javascript örneği eklemeye ne gerek var?
RightHandedMonkey

1
çünkü güzel
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

Bunu kopyalayıp html'nize yapıştırın:

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

Bu size, benim aracılığımla bu web sayfasından geliyor: http://www.html5rocks.com/en/tutorials/file/dndfiles/

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.