Строго говоря, ответ: нет .Разработчик не может запретить пользователю выбирать файлы любого типа или расширения в диалоговом окне выбора файлов в собственной операционной системе.Но все же атрибут accept <input type = "file">
может помочь обеспечить фильтр в диалоговом окне выбора файлов ОС.Например,
<!-- (IE 10+, Edge, Chrome, Firefox 42+) -->
<input type="file" accept=".xls,.xlsx" />
должен обеспечивать способ фильтрации файлов, отличных от .xls или .xlsx.Хотя страница MDN для элемента input
всегда говорила, что она поддерживает это, к моему удивлению, это не работало для меня в Firefox до версии 42. Это работает в IE 10+, Edge и Chrome.
Итак, для поддержки Firefox старше 42 лет вместе с IE 10+, Edge, Chrome и Opera, я думаю, лучше использовать список MIME-типов через запятую:
Поведение
<!-- (IE 10+, Edge, Chrome, Firefox) -->
<input type="file"
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel" />
[ Edge : раскрывающийся список фильтров типов файлов показывает типы файлов, упомянутые здесь, но не используется по умолчанию в раскрывающемся списке.Фильтр по умолчанию All files (*)
.]
Вы также можете использовать звездочки в MIME-типах.Например:
<input type="file" accept="image/*" /> <!-- all image types -->
<input type="file" accept="audio/*" /> <!-- all audio types -->
<input type="file" accept="video/*" /> <!-- all video types -->
W3C рекомендует авторам указать оба MIME-типа и соответствующие расширения в атрибуте accept
.Итак, подход best :
<!-- Right approach: Use both file extensions and corresponding MIME-types. -->
<!-- (IE 10+, Edge, Chrome, Firefox) -->
<input type="file"
accept=".xls,.xlsx, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel" />
JS. То же самое: здесь .
Ссылка: Список MIME-типов ВАЖНО: Использование атрибута accept
обеспечивает только способ фильтрации в файлах интересующих типов.Браузеры по-прежнему позволяют пользователям выбирать файлы любого типа.Необходимо выполнить дополнительные (на стороне клиента) проверки (с использованием JavaScript, один из способов будет this ), и определенно типы файлов ДОЛЖНЫ быть проверены на сервере ,используя комбинацию MIME-типа, используя как расширение файла, так и его двоичную подпись ( ASP.NET , PHP , Ruby , Java ).Вы также можете обратиться к этим таблицам для типов файлов и их магических чисел , чтобы выполнить более надежную проверку на стороне сервера.Вот три хорошо читает о загрузке файлов и безопасности.
РЕДАКТИРОВАТЬ: Может быть проверка типа файла с использованиемего двоичная подпись также может быть сделана на стороне клиента с помощью JavaScript (а не просто путем просмотра расширения) с использованием HTML5 File API, но, тем не менее, файл должен быть проверен на сервере, поскольку злонамеренный пользователь все еще сможет загружать файлысделав собственный HTTP-запрос.