Streng genommen lautet die Antwort keine . Ein Entwickler kann nicht verhindern, dass ein Benutzer Dateien beliebigen Typs oder beliebiger Erweiterung hochlädt.
Aber dennoch, die akzeptieren Attribut von <input type = "file">
kann dabei helfen, einen Filter in dem vom Browser/Betriebssystem des Benutzers bereitgestellten Dateiauswahldialogfeld zu erstellen. 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 die MDN Seite für input
Element sagte immer, dass es dies unterstützt, zu meiner Überraschung funktionierte dies bei mir in Firefox bis Version 42 nicht. Dies funktioniert in IE 10+, Edge und Chrome.
Um also Firefox älter als 42 zusammen mit IE 10+, Edge, Chrome und Opera zu unterstützen, ist es wohl besser, eine kommagetrennte 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" />
[ Kante (EdgeHTML) Verhalten: Das Dateityp-Filter-Dropdown zeigt die hier genannten Dateitypen an, ist aber nicht der Standard im Dropdown. 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 ihre entsprechenden Erweiterungen in der accept
Attribut. Das heißt, die am besten Ansatz ist:
<!-- Right approach: Use both file extensions and their 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: aquí .
Referenz: Liste der MIME-Typen
WICHTIG! Die Verwendung des accept
Attribut bietet lediglich eine Möglichkeit, die Dateien von Typen, die von Interesse sind, herauszufiltern. Browser erlauben es den Nutzern nach wie vor, Dateien beliebigen Typs auszuwählen. Zusätzliche (clientseitige) Prüfungen sollten durchgeführt werden (mit JavaScript, eine Möglichkeit wäre este ), und definitiv Dateitypen MUSS auf dem Server überprüft werden mit einer Kombination aus MIME-Typ, der sowohl die Dateierweiterung als auch die binäre Signatur ( ASP.NET , PHP , Rubinrot , Java ). Sie können auch Folgendes nachlesen diese Tabellen für Dateitypen und ihre magische Zahlen um eine robustere serverseitige Überprüfung durchzuführen.
Hier sind drei gut liest zu Datei-Uploads und Sicherheit.
EDIT : Vielleicht kann die Überprüfung des Dateityps anhand der binären Signatur auch auf der Client-Seite mit JavaScript (statt nur anhand der Erweiterung) unter Verwendung der HTML5 File API erfolgen, aber dennoch muss die Datei auf dem Server überprüft werden, da ein böswilliger Benutzer immer noch in der Lage ist, Dateien hochzuladen, indem er eine benutzerdefinierte HTTP-Anfrage stellt.
3 Stimmen
Es ist leicht möglich mit PHP, aber ich weiß nicht, ob Sie das verwenden können, also werde ich den Code nicht posten.
4 Stimmen
Das kann ich, aber ich habe eine Lösung, die mit JavaScript arbeitet - damit entfällt das lästige Hochladen einer Datei entonces die Fehlermeldung "Falsche Datei" erhalten.
0 Stimmen
Siehe auch die neuere Frage: stackoverflow.com/questions/181214/
2 Stimmen
Eine Sache, die zu beachten ist, ist, dass, während es nicht großartig für die Validierung ist, accept die sichtbaren Dateien auf die akzeptierten beschränkt, während der Benutzer sie durchsucht (zumindest in einigen Browsern ...). Es handelt sich also eher um eine ergonomische Funktion für die Benutzeroberfläche als um eine Validierungsfunktion.