Mark: input type file

Hallo !

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 ?

Gruß
Mark

  1. Schreibfehler:

    accept="text/plain"  habe ich da natürlich stehen, nicht accept="text/html" ...

  2. Hallo !

    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 ?

    Bei solchen Client - seitigen Geschichten bist du wohl oder übel darauf angewiesen wie die verschiedenen Browser, benutzt von verschiedenen Benutzern, von dir ungesehen, solche "Standards" interpretieren.

    Falls es tatsächlich darauf ankommt, bestimmte MIME-Types auszuschließen oder festzulegen wirst du um eine serverseitige Lösung dazu nicht umhin kommen.

    Gruss, Erwin (Rolf)

    --
    SELFforum - Das Tor zur Welt!
    Theoretiker: Wie kommt das Kupfer in die Leitung?
    Praktiker: Wie kommt der Strom in die Leitung?
  3. 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)
    1. Vielen Dank für die hilfreiche Darstellung !
      Ich werde dann mal versuchen, in php rauszubekommen, ob der User mir ne Texdatei geschickt hat oder was anderes. Wenngleich mir ausser der Abfrage des MIME-Typs und der Dateiendung gerade nicht viel einfällt ;-) Wir werden sehen..

      Gruß
      Mark

      1. Moin!

        Ich werde dann mal versuchen, in php rauszubekommen, ob der User mir ne Texdatei geschickt hat oder was anderes. Wenngleich mir ausser der Abfrage des MIME-Typs und der Dateiendung gerade nicht viel einfällt ;-) Wir werden sehen..

        Unix kennt den Befehl "file", welcher als Ergebnis eine Textzeile zurückliefert, die den gefundenen Dateityp näher beschreibt. Wenn diese Textzeile nicht das Wort "text" enthält, kann man mit einiger Sicherheit davon ausgehen, dass es sich um keine Textdatei handelt.

        Die Alternative wäre, einfach eine Textdatei anzunehmen, solange bis man auf störende Bytefolgen stößt. Wobei "störend" extrem von der zu erfüllenden Aufgabe abhängt. Nullbytes können stören und treten typischerweise nur bei Programmdateien auf, nicht aber in Textfiles. Aber wenn die Anwendung ein Nullbyte absolut benötigt, sind diese natürlich kein Kennzeichen mehr für "unbrauchbarer Dateiinhalt".

        Es ist in der Tat schwierig, einen Dateiinhalt als "hat Typ X" zu bestimmen, solange keine eindeutige Definition existiert, wie "Typ X" überhaupt auszusehen hat.

        Beispiel: Ein GIF-Bild hat eindeutige Merkmale. Da muß beispielsweise an bestimmten Stellen ganz am Anfang die Zeichenfolge "GIF" stehen, sonst ist die Datei kein GIF.

        Bei Textdateien ist das ungleich schwieriger. Weil jegliches Zeichen irgendwo in der Datei üblicherweise als Inhalt behandelt wird - und nicht als Kennzeichnung, die man vom Inhalt getrennt zu behandeln hätte.

        - Sven Rautenberg

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

          Beispiel: Ein GIF-Bild hat eindeutige Merkmale. Da muß beispielsweise an bestimmten Stellen ganz am Anfang die Zeichenfolge "GIF" stehen, sonst ist die Datei kein GIF.

          Andererseits ist die Existenz der Zeichenfolge "GIF" an dieser Stelle noch nicht hinreichend, um wirklich zu erkennen, ob es ein GIF ist - könnte ja auch eine Textdatei sein, die dort zufällig GIF stehen hat...

          cu,
          Andreas

          --
          MudGuard? Siehe http://www.Mud-Guard.de/