จะเลือกไฟล์หลายไฟล์ด้วย <input type =“ file”> ได้อย่างไร?


110

จะเลือกหลายไฟล์ด้วย<input type="file">?


เป็นเรื่องเกี่ยวกับ javascript และ html
Mask

คุณหมายถึงการอัปโหลดไฟล์หลายไฟล์ในคราวเดียว (เมื่อคุณเลือกทีละไฟล์แล้วคลิกอัปโหลด) หรือคุณหมายถึงใช้ ctrl + click เพื่อเลือกไฟล์หลาย ๆ ไฟล์ในหน้าต่างเบราว์เซอร์เดียว?
cletus

2
คุณสามารถทำได้ด้วย HTML5 โดยใช้แอตทริบิวต์หลายรายการในองค์ประกอบอินพุต <input type = 'file' multiple = ''> นี่คือซอชั้นดีที่ใช้มัน: jsfiddle.net/0GiS0/Yvgc2
Costa

คำตอบ:


126

คำตอบใหม่:

ใน HTML5 คุณสามารถเพิ่มmultipleแอตทริบิวต์เพื่อเลือกมากกว่า 1 ไฟล์

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

คำตอบเก่า:

คุณสามารถเลือกได้ 1 <input type="file" />ไฟล์ต่อ หากคุณต้องการส่งหลายไฟล์คุณจะต้องใช้แท็กอินพุตหลายแท็กหรือใช้ Flash หรือ Silverlight


7
Gmail ใช้ Flash ในการดำเนินการ
Fabien Ménager

19
ไม่ใช่ตั้งแต่ HTML5 มีแอตทริบิวต์หลายรายการสำหรับช่องป้อนข้อมูล
Costa

2
@Costa ในวันที่ 20 ตุลาคม 2009 เบราว์เซอร์ส่วนใหญ่ไม่รองรับฟีเจอร์นั้นและ Niavlys ได้แสดงโซลูชัน html5 เมื่อ 2 ปีที่แล้ว
ZippyV

2
คำตอบนี้โบราณยิ่งกว่าไดโนเสาร์
Click Upvote

2
multiple = "multiple" นี้ไม่เป็นมิตรกับผู้ใช้ผู้ใช้ avarage ไม่เข้าใจไม่รู้ด้วยซ้ำว่า "ปุ่ม ctrl" ทำหน้าที่อะไรและไม่สามารถเลือกไฟล์ในโฟลเดอร์ต่างๆได้
Jean-Paul

84

นอกจากนี้ยังมี HTML5 <input type="file" multiple />(สเปค )

การรองรับเบราว์เซอร์ค่อนข้างดีบนเดสก์ท็อป (ไม่รองรับ IE 9 และรุ่นก่อน ๆ ) ดีน้อยกว่าบนมือถือฉันเดาว่ามันยากที่จะใช้งานได้อย่างถูกต้องขึ้นอยู่กับแพลตฟอร์มและเวอร์ชัน


9
ไม่รองรับ IE9 และรุ่นก่อนหน้า :(
Ashit Vora

7
พิจารณาเพิ่มname="files[]"
Wariored

22

สิ่งทั้งหมดควรมีลักษณะดังนี้:

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

ตรวจสอบให้แน่ใจว่าคุณมีenctype='multipart/form-data'แอตทริบิวต์ใน<form>แท็กของคุณหรือคุณไม่สามารถอ่านไฟล์ทางฝั่งเซิร์ฟเวอร์ได้หลังจากส่ง!


เว้นแต่คุณจะส่งด้วย websocket หรือ ajax
bluejayke


8

คุณสามารถทำได้ทันทีด้วย HTML5

โดยพื้นฐานแล้วคุณใช้แอตทริบิวต์หลายรายการในการป้อนไฟล์

<input type='file' multiple>

แล้วการสนับสนุนสิ่งนี้ล่ะ? Canisuse.com ไม่มีข้อมูล
Hubert OG

ไม่แน่ใจตรวจที่เดียวกัน 555
Costa

1
FileReaderไม่มี.nameคุณสมบัติดังนั้นชื่อในตัวอย่างของคุณจึงเสมอundefined: jsfiddle.net/m5jeyeyt/1
vladkras

1

HTML5 ได้จัดเตรียมแอตทริบิวต์ใหม่หลายรายการสำหรับองค์ประกอบอินพุตที่มีประเภทแอตทริบิวต์เป็นไฟล์ คุณจึงสามารถเลือกได้หลายไฟล์และ IE9 และเวอร์ชันก่อนหน้าไม่รองรับสิ่งนี้

หมายเหตุ: โปรดระวังชื่อขององค์ประกอบอินพุต เมื่อคุณต้องการอัปโหลดไฟล์หลายไฟล์คุณควรใช้อาร์เรย์ไม่ใช่สตริงเป็นค่าของแอตทริบิวต์ชื่อ

เช่น input type = "file" name = "myPhotos []" multiple = "multiple"

และหากคุณใช้ php คุณจะได้รับข้อมูลเป็น $ _FILES และใช้ var_dump ($ _ FILES) และดูผลลัพธ์และทำการประมวลผลตอนนี้คุณสามารถทำซ้ำและทำส่วนที่เหลือได้


1

ง่ายมาก ...

<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
นี่ตอบชัดเจนอยู่แล้ว ต้องเพิ่มตัวอย่างจาวาสคริปต์คืออะไร?
RightHandedMonkey

1
มันเป็นอะไรที่ดี?
Thomas Ludewig


-2

คัดลอกและวางลงใน 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>';
}

สิ่งนี้มาถึงคุณผ่านทางฉันจากหน้าเว็บนี้: http://www.html5rocks.com/en/tutorials/file/dndfiles/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.