Как фильтровать типы файлов в среде исполнения plupload HTML5?

Я интегрирую plupload со своим приложением ASP.NET MVC3 со следующими настройками:

var uploaderSettings = {
    runtimes: "html5,silverlight,flash,html4",
    browse_button: "browse-button",
    container: "upload-ui",
    drop_element: "drag-drop-area",
    file_data_name: "file",
    multiple_queues: true,
    max_file_size: "10mb",
    url: '@Url.Action("Index", "Upload")',
    flash_swf_url: '@Url.Content("~/js/plupload/plupload.flash.swf")',
    silverlight_xap_url: '@Url.Content("~/js/plupload.silverlight.xap")',
    filters: [
        {title: "Excel Files", extensions: "xls,xslx,csv"}
    ],
    multipart: true,
    urlstream_upload: true,
    dragdrop: true,
    multipart_params: {
        token: "@AuthToken()"
    }
};

Из которого plupload генерирует <input type="file"> со следующими элементами в атрибуте accept (через запятую):

  • application/vnd.ms-excel
  • application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
  • text/csv

В Firefox 12.0 он игнорирует фильтр и позволяет выбирать файлы любого типа.

В Chrome 21 он не работает с указанными расширениями файлов, но если я изменю фильтр на файлы изображений (jpg, png, gif), он правильно отфильтрует диалоговое окно «Выбрать файл».

Я нашел эту проблему в системе отслеживания ошибок Chromium, которая, похоже, быть связанным, но был помечен как исправленный еще в октябре 2010 года.

Если я переключаю приоритет времени выполнения на silverlight или flash выше html5, он работает правильно, но я бы не стал этого делать, так как я теряю функцию загрузки файлов с помощью перетаскивания.

Это просто ограничение поддержки браузером атрибута accept, я что-то не так делаю или это ошибка в plupload?

ОБНОВЛЕНИЕ: похоже, что это известная проблема, и она кипит вплоть до поддержки браузером фильтрации mime-типа.


person James Simm    schedule 29.05.2012    source источник
comment
Accept — это не HTML5 w3schools.com/tags/att_input_accept.asp, так что можно было подумать она должна иметь более широкую поддержку!   -  person Rob Stevenson-Leggett    schedule 30.05.2012
comment
Правда, он существует со времен HTML2, однако у него много функций HTML5; HTML5 — это скорее стандартизация случайных функций, специфичных для браузера.   -  person James Simm    schedule 30.05.2012


Ответы (2)


Похоже, это не лучший способ проверки типов файлов.

атрибут accept во входном файле не работает

Это только для подсказки ОС фильтровать типы файлов в диалоговом окне.

Когда я делал это с помощью PL Upload, я делал это на стороне сервера расширений.

person Rob Stevenson-Leggett    schedule 30.05.2012

person    schedule
comment
Хотя этот блок кода может ответить на вопрос, было бы лучше ответить, если бы вы могли объяснить, почему это происходит. - person DavidPostill; 19.02.2015