Как выбрать несколько файлов с помощью <input type = «file»>?

110

Как выбрать несколько файлов <input type="file">?

Маска
источник
Речь идет о javascript и html
Mask
Вы имеете в виду загрузку нескольких файлов за один раз (когда вы выбираете по одному, а затем нажимаете кнопку «Загрузить»)? Или вы имеете в виду использование ctrl + click для выбора нескольких файлов в одном окне браузера?
cletus
2
Вы можете сделать это с помощью HTML5, используя атрибут multiple в элементе ввода. <input type = 'file' multiple = ''> Вот отличная скрипка, которая его использует: jsfiddle.net/0GiS0/Yvgc2
Коста,

Ответы:

126

Новый ответ:

В HTML5 вы можете добавить multipleатрибут, чтобы выбрать более 1 файла.

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

Старый ответ:

Вы можете выбрать только 1 файл для каждого <input type="file" />. Если вы хотите отправить несколько файлов, вам придется использовать несколько тегов ввода или использовать Flash или Silverlight.

ZippyV
источник
7
Gmail использует для этого Flash
Фабьен Менагер,
19
Не начиная с HTML5. Для поля ввода есть несколько атрибутов.
Costa
2
@Costa 20 октября 2009 года большинство браузеров не поддерживали эту функцию, а Niavlys уже показала решение html5 2 года назад.
ZippyV
2
этот ответ более древний, чем динозавры
Click Upvote
2
this multiple = "multiple" неудобен для пользователя, средний пользователь этого не понимает, даже не знает, что делает "кнопка ctrl", и не может выбирать файлы в разных папках.
Жан-Поль
84

Также есть HTML5 <input type="file" multiple />( спецификация ).

Браузерная поддержка довольно хороша для настольных компьютеров (только не поддерживается IE 9 и более ранними версиями), менее хороша для мобильных устройств, я думаю, потому что ее сложнее правильно реализовать в зависимости от платформы и версии.

Ниавлис
источник
9
Не поддерживается в IE9 и более ранних версиях :(
Ашит Вора,
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>теге, иначе вы не сможете читать файлы на стороне сервера после отправки!

mark.inman
источник
если вы не отправите его с помощью websocket или ajax
bluejayke
8

Теперь вы можете сделать это с помощью HTML5

По сути, вы используете множественный атрибут при вводе файла.

<input type='file' multiple>
Коста
источник
А как насчет поддержки этой штуки? Canisuse.com не имеет информации.
Hubert OG
Не уверена, проверила то же место, ха-ха.
Коста
1
FileReader не имеет .nameсвойства, поэтому заголовок в вашем примере всегда undefined: jsfiddle.net/m5jeyeyt/1
vladkras
1

HTML5 предоставил новый атрибут multiple для элемента ввода, атрибут type которого - файл. Таким образом, вы можете выбрать несколько файлов, а IE9 и предыдущие версии не поддерживают это.

ПРИМЕЧАНИЕ: будьте осторожны с именем элемента ввода. когда вы хотите загрузить несколько файлов, вы должны использовать массив, а не строку в качестве значения атрибута name.

пример: 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
На это уже дан четкий ответ. Зачем нужно добавлять пример javascript?
RightHandedMonkey
1
потому что это хорошо?
Томас Людвиг,
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']);
?>
Anowar Hossain
источник
-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/

коллиг
источник