Genau genommen lautet die Antwort nein . Ein Entwickler kann einen Benutzer nicht daran hindern, Dateien jeglicher Art oder Erweiterung hochzuladen.
Das Attribut accept von <input type = "file">
kann dennoch dazu beitragen, einen Filter im Dialogfeld zur Dateiauswahl des Betriebssystems bereitzustellen. Zum Beispiel,
<!-- (IE 10+, Edge (EdgeHTML), Edge (Chromium), Chrome, Firefox 42+) -->
<input type="file" accept=".xls,.xlsx" />
sollte eine Möglichkeit bieten, andere Dateien als .xls oder .xlsx herauszufiltern. Obwohl auf der MDN- Seite für input
element immer angegeben wurde, dass dies unterstützt wird, funktionierte dies zu meiner Überraschung in Firefox bis Version 42 nicht. Dies funktioniert in IE 10+, Edge und Chrome.
Um Firefox älter als 42 zusammen mit IE 10+, Edge, Chrome und Opera zu unterstützen, ist es wahrscheinlich besser, eine durch Kommas getrennte Liste von MIME-Typen zu verwenden:
<!-- (IE 10+, Edge (EdgeHTML), Edge (Chromium), Chrome, Firefox) -->
<input type="file"
accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel" />
[ Edge (EdgeHTML) -Verhalten: Das Dropdown-Menü für Dateitypfilter zeigt die hier genannten Dateitypen an, ist jedoch nicht die Standardeinstellung in der Dropdown-Liste. Der Standardfilter ist All files (*)
.]
Sie können auch Sternchen in MIME-Typen verwenden. Zum Beispiel:
<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 empfiehlt Autoren, sowohl MIME-Typen als auch entsprechende Erweiterungen im accept
Attribut anzugeben . Der beste Ansatz ist also:
<!-- 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 desselben: hier .
Referenz: Liste der MIME-Typen
WICHTIG: Die Verwendung des accept
Attributs bietet nur eine Möglichkeit zum Filtern in Dateien von Typen, die von Interesse sind. In Browsern können Benutzer weiterhin Dateien eines beliebigen Typs auswählen. Zusätzliche (Client-Seite) Kontrollen durchgeführt werden soll (mit Hilfe von JavaScript, wäre ein Weg sein , diese ), und auf jeden Fall Dateitypen muss auf dem Server überprüft werden , die eine Kombination von MIME-Typ unter Verwendung von sowohl mit der Dateierweiterung und seine binäre Signatur ( ASP .NET , PHP , Ruby , Java ). In diesen Tabellen finden Sie möglicherweise auch Dateitypen und deren magische Zahlen, um eine robustere serverseitige Überprüfung durchzuführen.
Hier sind drei gute Informationen zu Datei-Uploads und Sicherheit.
BEARBEITEN: Möglicherweise kann die Überprüfung des Dateityps mithilfe seiner binären Signatur auch auf der Clientseite mithilfe von JavaScript (anstatt nur anhand der Erweiterung) mithilfe der HTML5-Datei-API durchgeführt werden. Die Datei muss jedoch auf dem Server überprüft werden, da es sich um einen böswilligen Benutzer handelt Sie können weiterhin Dateien hochladen, indem Sie eine benutzerdefinierte HTTP-Anfrage stellen.