Ściśle mówiąc, odpowiedź brzmi „ nie” . Deweloper nie może uniemożliwić użytkownikowi przesyłania plików dowolnego typu lub rozszerzenia.
Mimo to atrybut accept<input type = "file">
może pomóc w zapewnieniu filtru w oknie dialogowym wyboru pliku w systemie operacyjnym. Na przykład,
<!-- (IE 10+, Edge (EdgeHTML), Edge (Chromium), Chrome, Firefox 42+) -->
<input type="file" accept=".xls,.xlsx" />
powinien zapewnić sposób na odfiltrowanie plików innych niż .xls lub .xlsx. Chociaż strona MDN dla input
elementu zawsze mówiła, że to obsługuje, ku mojemu zaskoczeniu, nie działało to dla mnie w Firefoksie do wersji 42. To działa w IE 10+, Edge i Chrome.
Tak więc, do obsługi Firefoksa starszego niż 42 wraz z IE 10+, Edge, Chrome i Opera, myślę, że lepiej jest używać listy typów MIME oddzielonych przecinkami:
<!-- (IE 10+, Edge (EdgeHTML), Edge (Chromium), Chrome, Firefox) -->
<input type="file"
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel" />
Zachowanie [ Edge (EdgeHTML): lista rozwijana filtru typów plików pokazuje typy plików wymienione tutaj, ale nie jest domyślna w liście rozwijanej. Domyślny filtr to All files (*)
.]
Możesz także używać gwiazdek w typach MIME. Na przykład:
<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 zaleca autorom określenie w accept
atrybucie zarówno typów MIME, jak i odpowiednich rozszerzeń . Zatem najlepszym podejściem jest:
<!-- 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 tego samego: tutaj .
Odniesienie: Lista typów MIME
WAŻNE: Użycie tego accept
atrybutu zapewnia jedynie sposób filtrowania w interesujących plikach typów. Przeglądarki nadal pozwalają użytkownikom wybierać pliki dowolnego typu. Należy wykonać dodatkowe kontrole (po stronie klienta) (przy użyciu JavaScript, jednym ze sposobów byłoby to ), a zdecydowanie typy plików MUSZĄ zostać zweryfikowane na serwerze , przy użyciu kombinacji typu MIME przy użyciu zarówno rozszerzenia pliku, jak i jego podpisu binarnego ( ASP .NET , PHP , Ruby , Java ). Możesz także zapoznać się z tymi tabelami, aby uzyskać informacje o typach plików i ich magicznych liczbach, aby przeprowadzić bardziej niezawodną weryfikację po stronie serwera.
Oto trzy dobre czyta na przesyłaniu plików i bezpieczeństwa.
EDYCJA: Może weryfikacja typu pliku za pomocą jego podpisu binarnego może być również przeprowadzona po stronie klienta za pomocą JavaScript (a nie tylko poprzez spojrzenie na rozszerzenie) za pomocą interfejsu API plików HTML5, ale plik musi zostać zweryfikowany na serwerze, ponieważ złośliwy użytkownik nadal będzie mógł przesyłać pliki, wysyłając niestandardowe żądanie HTTP.