Як вибрати декілька файлів за допомогою <input type = "file">?


110

Як вибрати декілька файлів за допомогою <input type="file">?


Йдеться про javascript та html
маска

Ви маєте на увазі завантаження декількох файлів за один раз (коли ви вибираєте один за одним і натискаєте завантаження)? Або ви хочете сказати, що за допомогою ctrl + click виберіть кілька файлів в одному вікні браузера?
клент

2
Ви можете зробити це за допомогою HTML5 за допомогою множинного атрибута на вхідному елементі. <input type = 'file' multiple = ''> Ось чудова загадка,
Коста,

Відповіді:


126

Нова відповідь:

У HTML5 ви можете додати multipleатрибут, щоб вибрати більше 1 файлу.

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

Стара відповідь:

Ви можете вибрати лише 1 файл на <input type="file" />. Якщо ви хочете надіслати декілька файлів, вам доведеться використовувати кілька тегів введення або використовувати Flash або Silverlight.


7
Gmail для цього використовує Flash
Фабієн Менеджер

19
Не з HTML5. Існує кілька атрибутів для поля введення.
Коста,

2
@Costa 20 жовтня 2009 року більшість браузерів не підтримували цю функцію, і Niavlys вже показав рішення html5 2 роки тому.
ZippyV

2
ця відповідь давніша, ніж динозаври
натисніть Upvote

2
цей multiple = "multiple" не є зручним для користувачів, користувач avarage цього не розуміє, навіть не знає, що робить "кнопка ctrl", і він не може вибрати файли в різних папках.
Жан-Пол

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>тезі є атрибут , або ви не можете прочитати файли на стороні сервера після надсилання!


якщо ви не надсилаєте його за допомогою веб-сокета або ajax
bluejayke


8

Ви можете це зробити зараз за допомогою HTML5

По суті, ви використовуєте множинний атрибут на вході файлу.

<input type='file' multiple>

А як щодо підтримки цієї речі? Canisuse.com не має такої інформації.
Hubert OG

Я не впевнений, я перевірив те саме місце, ха-ха.
Коста

1
FileReader не має .nameвластивості, тому заголовок у вашому прикладі завжди є undefined: jsfiddle.net/m5jeyeyt/1
vladkras

1

HTML5 надав новий атрибут, кратний для елемента введення, атрибутом типу якого є файл. Таким чином, ви можете вибрати кілька файлів, а IE9 і попередні версії це не підтримують.

ПРИМІТКА: будьте обережні з назвою вхідного елемента. коли ви хочете завантажити декілька файлів, ви повинні використовувати масив, а не рядок як значення атрибута імені.

наприклад: type 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
На це вже чітко відповіли. Для чого потрібно додати приклад javascript?
RightHandedMonkey

викликати його приємно?
Томас Людвіг

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

Скопіюйте та вставте це у свій 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/

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.