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 inputelement 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 acceptAttribut 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 acceptAttributs 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.