Làm cách nào để chọn nhiều tệp với <input type = “file”>?


110

Làm thế nào để chọn nhiều tệp với <input type="file">?


Đó là về javascript và html
Mask

Có phải bạn muốn tải lên nhiều tệp cùng một lúc (khi bạn chọn một tệp một lần và sau đó nhấp vào tải lên)? Hay ý bạn là sử dụng ctrl + nhấp để chọn nhiều tệp trong một cửa sổ trình duyệt?
cletus

2
Bạn có thể làm điều đó với HTML5 bằng cách sử dụng nhiều thuộc tính trên phần tử đầu vào. <input type = 'file' multiple = ''> Đây là một trò chơi tuyệt vời sử dụng nó: jsfiddle.net/0GiS0/Yvgc2
Costa

Câu trả lời:


126

Câu trả lời mới:

Trong HTML5, bạn có thể thêm multiplethuộc tính để chọn nhiều hơn 1 tệp.

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

Câu trả lời cũ:

Bạn chỉ có thể chọn 1 tệp cho mỗi <input type="file" />. Nếu bạn muốn gửi nhiều tệp, bạn sẽ phải sử dụng nhiều thẻ nhập hoặc sử dụng Flash hoặc Silverlight.


7
Gmail sử dụng Flash để làm điều này
Fabien Menager

19
Không phải kể từ HTML5. Có nhiều thuộc tính cho trường đầu vào.
Costa

2
@Costa Vào ngày 20 tháng 10 năm 2009, hầu hết các trình duyệt không hỗ trợ tính năng đó và Niavlys đã đưa ra giải pháp html5 cách đây 2 năm.
ZippyV

2
câu trả lời này cổ xưa hơn khủng long
Nhấp vào

2
multi = "multiple" này không thân thiện với người dùng, người dùng bình thường không hiểu nó, thậm chí không biết "nút ctrl" làm gì và nó không thể chọn tệp trong các thư mục khác nhau.
Jean-Paul,

84

Ngoài ra còn có HTML5 <input type="file" multiple />( đặc tả ).

Hỗ trợ trình duyệt khá tốt trên máy tính để bàn (chỉ là không được hỗ trợ bởi IE 9 trở về trước), ít tốt hơn trên thiết bị di động, tôi đoán vì khó triển khai chính xác hơn tùy thuộc vào nền tảng và phiên bản.


9
Không được hỗ trợ trên IE9 trở về trước :(
Ashit Vora 9/11/12

7
xem xét thêmname="files[]"
Wariored

22

Toàn bộ mọi thứ sẽ giống như sau:

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

Đảm bảo rằng bạn có enctype='multipart/form-data'thuộc tính trong <form>thẻ của mình , nếu không bạn không thể đọc các tệp ở phía máy chủ sau khi gửi!


trừ khi bạn gửi nó bằng websocket hoặc ajax
bluejayke


8

Bạn có thể làm điều đó ngay bây giờ với HTML5

Về bản chất, bạn sử dụng nhiều thuộc tính trên đầu vào tệp.

<input type='file' multiple>

Điều gì về hỗ trợ cho điều này? Canisuse.com không có thông tin.
Hubert OG

Tôi không chắc, tôi đã kiểm tra cùng một nơi, haha.
Costa

1
FileReader không có thuộc .nametính, vì vậy tiêu đề trong ví dụ của bạn luôn là undefined: jsfiddle.net/m5jeyeyt/1
vladkras

1

HTML5 đã cung cấp nhiều thuộc tính mới cho phần tử đầu vào có thuộc tính kiểu là tệp. Vì vậy, bạn có thể chọn nhiều tệp và IE9 và các phiên bản trước không hỗ trợ điều này.

LƯU Ý: cẩn thận với tên của phần tử đầu vào. khi bạn muốn tải lên nhiều tệp, bạn nên sử dụng mảng chứ không phải chuỗi làm giá trị của thuộc tính name.

ví dụ: input type = "file" name = "myPhotos []" multiple = "nhiều"

và nếu bạn đang sử dụng php thì bạn sẽ lấy dữ liệu trong $ _FILES và sử dụng var_dump ($ _ FILES) và xem đầu ra và thực hiện xử lý Bây giờ bạn có thể lặp lại và thực hiện phần còn lại


1

Thật dễ dàng ...

<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
Điều này đã được trả lời rõ ràng. Cần thêm ví dụ javascript là gì?
RightHandedMonkey

vì nó tốt đẹp?
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

Sao chép và dán nó vào html của bạ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>';
}

Điều này đến với bạn, thông qua tôi, từ trang web này: http://www.html5rocks.com/en/tutorials/file/dndfiles/

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.