Строго говоря, ответ - нет . Разработчик не может запретить пользователю загружать файлы любого типа или расширения.
Но все же атрибут accept<input type = "file">
может помочь обеспечить фильтр в диалоговом окне выбора файлов в ОС. Например,
<!-- (IE 10+, Edge (EdgeHTML), Edge (Chromium), 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 (EdgeHTML), Edge (Chromium), Chrome, Firefox) -->
<input type="file"
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel" />
Поведение [ Edge (EdgeHTML): раскрывающийся список фильтров типов файлов показывает типы файлов, упомянутые здесь, но не является значением по умолчанию в раскрывающемся списке. Фильтр по умолчанию 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 рекомендует авторам указывать в accept
атрибуте как MIME-типы, так и соответствующие расширения . Итак, лучший подход это:
<!-- Right approach: Use both file extensions and corresponding MIME-types. -->
<!-- (IE 10+, Edge (EdgeHTML), Edge (Chromium), Chrome, Firefox) -->
<input type="file"
accept=".xls,.xlsx, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel" />
JSFiddle из того же: здесь .
Ссылка: список MIME-типов.
ВАЖНО: Использование accept
атрибута обеспечивает только способ фильтрации в файлах типов, представляющих интерес. Браузеры по-прежнему позволяют пользователям выбирать файлы любого типа. Дополнительно ( на стороне клиента) проверки должны быть сделаны ( с использованием JavaScript, один из способов было бы это ), и определенно типы файлов должны быть проверены на сервере , используя комбинацию MIME-типа с использованием как расширение файла и его двоичную подпись ( ASP .NET , PHP , Ruby , Java ). Вы также можете обратиться к этим таблицам для типов файлов и их магических чисел, чтобы выполнить более надежную проверку на стороне сервера.
Вот три хороших чтения по загрузке файлов и безопасности.
РЕДАКТИРОВАТЬ: Может быть, проверка типа файла с использованием его двоичной подписи также может быть выполнена на стороне клиента с помощью JavaScript (а не просто путем просмотра расширения) с использованием HTML5 File API, но, тем не менее, файл должен быть проверен на сервере, поскольку злоумышленник по-прежнему будет в состоянии загружать файлы, сделав собственный HTTP-запрос.