Строго кажучи, відповідь - ні . Розробник не може перешкодити користувачеві завантажувати файли будь-якого типу або розширення.
Але все ж, атрибут 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 ). Ви також можете звернутися до цих таблиць щодо типів файлів та їх магічних чисел, щоб виконати більш надійну перевірку на стороні сервера.
Ось три хороших читання щодо завантаження файлів та безпеки.
EDIT: Можливо, перевірку типу файлів за допомогою його двійкового підпису можна виконати і на стороні клієнта за допомогою JavaScript (а не просто, дивлячись на розширення) за допомогою API File5 HTML5, але все-таки файл повинен бути перевірений на сервері, оскільки зловмисний користувач як і раніше зможе завантажувати файли, зробивши спеціальний HTTP-запит.