Оказывается, Safari 4, Chrome 3 и Firefox 3.6 Beta 4 поддерживают выбор сразу нескольких файлов с помощью атрибута multiple
.
<input name="att" type="file" multiple="true"/>
Сафари рядом с кнопкой показывает количество выбранных файлов, плюс при поднесении мышки вылезает тултип с названиями файлов:
Еще более удивительно то, что Opera уже давно поддерживает multiple-файлы с помощью атрибутов min
и max
.
<input name="att" type="file" min="1" max="99"/>
При этом в Опере меняется название кнопки.
Обычный инпут: |
С атрибутами |
Очень хочется верить, что multiple
заимплементируют в IE 9. Тогда можно будет, наконец, полностью отказаться от дурацкой флешки.
6 комментариев:
Что значит «тогда можно будет наконец»? Тут вон IE 6 вышел восемь лет назад, а до сих пор приходится учитывать его пользователей.
Все зависит от аудитории вашего сайта, и того, насколько у вас есть силы и возможности реализовывать такие фичи в старых версиях браузеров.
Я думаю, для многих сайтов будет вполне приемлемо использовать только нативную поддержку multiple-выбора файлов. В старых браузерах будет по-прежнему работать выбор файлов по одному. Graceful degradation.
Спасибо за описание. Я проверил, как работает прием нескольких файлов на сервере. Из Хрома всё загружается, а вот Опера посылает данные в каком-то странном формате, который не распознается PHP, и в результате массив $_FILES пустой, а массив $_POST содержит следующее:
Array
(
[pictures] => Array
(
[0] => ------------PHZ0n36koOH0nyhyVrvxMe
Content-Disposition: form-data; name="pictures[]"; filename="file1.txt"
Content-Type: application/octet-stream
Содержимое 1
------------PHZ0n36koOH0nyhyVrvxMe
Content-Disposition: form-data; name="pictures[]"; filename="file2.txt"
Content-Type: application/octet-stream
Содержимое 2
------------PHZ0n36koOH0nyhyVrvxMe--
)
)
Гугл пока не помог. Случайно не знаете, как это можно исправить, чтобы вручную не парсить?
@parpalak:
Да, я тоже столкнулся с этой проблемой в Опере. Вот что я нагуглил:
http://bugs.php.net/bug.php?id=47789
http://bugs.php.net/bug.php?id=49196
http://www.rhinocerus.net/forum/lang-perl-misc/581518-process-upload-multiple-files-single-input-type-file.html
Нормального простого решения пока не нашел. Если найду, обязательно поделюсь.
А я вот это нашел: http://habrahabr.ru/blogs/webdev/76749/
В стандарте написано следующее:
If multiple files are to be returned as the result of a single form entry, they should be represented as a "multipart/mixed" part embedded within the "multipart/form-data".
Выходит, Опера работает в рамках стандарта, отсылая файлы в multipart/mixed, а PHP такое не понимает. Разработчики PHP еще в марте не захотели исправлять баг 47789. В общем, неясно, когда исправят.
А еще получается, что FF и Safari/Chrome нарушают эту рекомендацию из стандарта. Возможно, чтобы не было подобных проблем, как у Оперы с PHP.
Это все конечно очень круто. Но чет у меня не получается получить эти файлы на asp.net 1.1 Может кто нибудь помочь
Отправить комментарий