Sven Rautenberg: input type file

Beitrag lesen

Moin!

Ich hab den Mimetyp auf txt-dateien festgelegt:

<input type="file" name="sql_file" accept="text/html">

Es erscheint auch wie gewünscht das Textfeld mit dem Durchsuchen Button daneben. Klickt man aber nun auf diesen drauf, kann ich trotz accept Anweisung alle Dateitypen auswählen. Es werden alle Dateien angezeigt, nicht nur .txt Dateien..

Was muss ich machen, damit man nur .txt dateien auswählen kann ?

Die Sache vergessen wäre hilfreich.

Punkt 1: Ein Mime-Typ "text/plain" umfaßt natürlich nicht nur ".txt" als Dateiendung, sondern alle Dateiendungen, die mit diesem Mimetyp verknüpft sind.

Punkt 2: Zusätzlich zu deiner Angabe im HTML-Quelltext brauchst du auch einen Browser, der sie berücksichtigt. Und da gibts im Moment keinen einzigen, der das tut. Jedenfalls keinen, der mir oder anderen hier im Forum bekannt wäre.

Denn das Problem ist: Du willst auf deinem Server gerne text/plain empfangen. Aber woher willst du wissen, dass genau die Datei, welche der Benutzer dir senden will, auch wirklich mit diesem Mimetyp verknüpft ist?

Mal angenommen, du hast eine CSV-Datei "datei.csv". Das ist in erster Näherung eine "text/plain"-Datei. Man _kann_ ihr aber auch den Mimetyp "text/comma-separated-values" zuordnen. Und dann würde sie nicht mehr gefunden werden.

Umgekehrt kannst du natürlich eine CSV-Datei mit dem geforderten Mime-Typ "text/comma-separated-values" hochladen lassen. Was aber, wenn CSV-Dateien nur mit "text/plain" verknüpft sind?

Ok, dann kann man natürlich meinen, dass die Subtypen innerhalb von "text/*" dann einfach ignoriert werden können. Aber was ist, wenn der Benutzer Excel installiert hat, und auch CSV-Dateien mit Excel verknüpft sind. Das ist dann nämlich der Mime-Typ "application/vnd.ms-excel".

Du siehst hoffentlich ein, dass es gar keinen Sinn macht, dass der Browser auf den gewünschten Mimetyp mit einer einschränkenden Dateiauswahl reagiert. Natürlich wäre es wünschenswert, wenn man die Dateiauswahl zuerst auf "passende" Dateiendungen beschränkt, der Benutzer diese aber zugunsten einer alternativen Auswahl oder auch garkeiner Auswahl verändern kann.

Allerdings gibt es ja nicht nur Windows. Und andere Betriebssysteme kennen das Konzept von Dateiendungen gar nicht. MacOS speichert den Dateityp in einem separaten Bereich des Dateisystems (ressource fork), und Linux kennt in dem Sinne keine Dateitypen, sondern unterscheidet eigentlich nur zwischen ausführbaren und nicht-ausführbaren Dateien. Wenn der Benutzer Ordnung in seine Dateien bringen will, ist das komplett sein eigenes Bier - was dann allerdings häufig eben doch durch die Wahl geeigneter Dateiendungen realisiert wird. Die sich aber keinesfalls an irgendwelchen Standards orientieren müssen. Textdateien beispielsweise haben in den seltensten Fällen die Endung ".txt", sondern werden viel eher nach ihrer Aufgabe oder ihrer Inhaltskategorie benannt. Also sowas wie ".conf" für Konfigurationsdateien.

- Sven Rautenberg

--
"Habe den Mut, dich deines eigenen Verstandes zu bedienen!" (Immanuel Kant)