NeFrage: File-Upload: Welche Kodierung ?

Hallo Forum,

ein Dateiupload kann ja mit folgendem html-Code bewerkstelligt werden:

<form name="upload" action="http://meineSeite.de/meinScript" enctype="multipart/form-data" method="post">

Wählen Sie eine Datei von Ihrem Rechner aus:<br>
<input name="Datei" type="file" size="50" maxlength="100000" >

</form>

In der CGI-Variablen REQUEST_CONTENT steht dann der "Inhalt" der Datei (genauer gesagt der Formulardaten).

Meine Frage: In welchem Format (MIME-Kodierung?) kommen die Daten der Datei an? (Habe mal ein Bild testweise hochgeladen, binär war es nicht :-) )

Vielen Dank für Eure Hilfe!

  1. Moin!

    In der CGI-Variablen REQUEST_CONTENT steht dann der "Inhalt" der Datei (genauer gesagt der Formulardaten).

    Du sprichst von Perl?

    Meine Frage: In welchem Format (MIME-Kodierung?) kommen die Daten der Datei an? (Habe mal ein Bild testweise hochgeladen, binär war es nicht :-) )

    Nutze Das Perl-Modul CGI, um mit Formulardaten zu hantieren. Dann machst du keine Fehler beim Dekodieren und sparst dir eine Menge Arbeit.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. Moin!

      In der CGI-Variablen REQUEST_CONTENT steht dann der "Inhalt" der Datei (genauer gesagt der Formulardaten).

      Du sprichst von Perl?

      Meine Frage: In welchem Format (MIME-Kodierung?) kommen die Daten der Datei an? (Habe mal ein Bild testweise hochgeladen, binär war es nicht :-) )

      Nutze Das Perl-Modul CGI, um mit Formulardaten zu hantieren. Dann machst du keine Fehler beim Dekodieren und sparst dir eine Menge Arbeit.

      • Sven Rautenberg

      erstmal danke für deine schnelle antwort.

      ich spreche nicht von perl. arbeite mit einem domino-server, der die request per ls-agent entgegen nimmt. mir stehen da leider keine libs etc. zur verfügung, denen ich das ganz einfach übergeben kann, und dann machts mir da ein bild draus.

      muss das dekodieren selbst programmieren (dürfte auch nicht das problem sein). doch dazu müsste ich halt erstmal wissen, welche codierung der browser verwendet. base64 scheint es jedenfalls nicht zu sein...

      1. Moin!

        ich spreche nicht von perl. arbeite mit einem domino-server, der die request per ls-agent entgegen nimmt. mir stehen da leider keine libs etc. zur verfügung, denen ich das ganz einfach übergeben kann, und dann machts mir da ein bild draus.

        muss das dekodieren selbst programmieren (dürfte auch nicht das problem sein). doch dazu müsste ich halt erstmal wissen, welche codierung der browser verwendet. base64 scheint es jedenfalls nicht zu sein...

        Siehe RFC 1867. Der File-Upload wird MIME-gerecht im Body des Post-Requests codiert, alle notwendigen Angaben dazu sollten eigentlich im Header des jeweiligen Parts stehen - siehe Sektion 3.3.

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
  2. Hallo,

    Meine Frage: In welchem Format (MIME-Kodierung?) kommen die Daten der Datei an? (Habe mal ein Bild testweise hochgeladen, binär war es nicht :-) )

    Das Upload an sich hat mit der MIME-Kodierung erstmal nichts zu tun.
    Die Frage ist die: Wie wird die Datei auf den Server geschrieben?

    Mit enctype="multipart/form-data" method="post" bekommt Dein Script einen Dateihandler auf das inputfeld type="file". Das Script muss also den Handler auslesen und die Datei im binmode auf den Server ins Dateisystem schreiben. Du _kannst_ (musst aber nicht) den Datenstrom, der bei einem POST aus <STDIN> gelesen wird, auch base64 kodieren und sonswohin schreiben, in eine DB z.B. (Textfeld).

    Den ankommenden MIME-Typ sollte Dein Script auch auslesen können, die entsprechenden Libs vorausgesetzt.

    So hoffe ich, dass alle Klarheiten beseitigt sind ;-)
    Hotte

    PS: CGI-Umgebungsvariablen sind nicht Perl-spezifisch, die setzt der Server (oder auch nicht).

    1. Hallo,

      Meine Frage: In welchem Format (MIME-Kodierung?) kommen die Daten der Datei an? (Habe mal ein Bild testweise hochgeladen, binär war es nicht :-) )

      Das Upload an sich hat mit der MIME-Kodierung erstmal nichts zu tun.
      Die Frage ist die: Wie wird die Datei auf den Server geschrieben?

      Mit enctype="multipart/form-data" method="post" bekommt Dein Script einen Dateihandler auf das inputfeld type="file". Das Script muss also den Handler auslesen und die Datei im binmode auf den Server ins Dateisystem schreiben. Du _kannst_ (musst aber nicht) den Datenstrom, der bei einem POST aus <STDIN> gelesen wird, auch base64 kodieren und sonswohin schreiben, in eine DB z.B. (Textfeld).

      Den ankommenden MIME-Typ sollte Dein Script auch auslesen können, die entsprechenden Libs vorausgesetzt.

      So hoffe ich, dass alle Klarheiten beseitigt sind ;-)
      Hotte

      PS: CGI-Umgebungsvariablen sind nicht Perl-spezifisch, die setzt der Server (oder auch nicht).

      Danke für Deine Antwort.
      Der Server ist ein Domino-Server, die Webseite ruft einen LS-Agenten auf. Dort kann ich die CGI-Variable "REQUEST_CONTENT" auslesen.
      Die Variable hat dabei folgenden Inhalt:

      -----------------------------73383132926004 Content-Disposition: form-data; name="Datei"; filename="hgbild_test.jpg" Content-Type: image/jpeg
      [daten des bildes]
      -----------------------------73383132926004 Content-Disposition: form-data; name="Nachricht" Irgendein text -----------------------------73383132926004--

      Die Codierung des Bildes scheint weder binär, noch base64 zu sein.

      1. Moin!

        Die Codierung des Bildes scheint weder binär, noch base64 zu sein.

        Woraus schließt du das?

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
        1. Moin!

          Die Codierung des Bildes scheint weder binär, noch base64 zu sein.

          Woraus schließt du das?

          • Sven Rautenberg

          danke erstmal für eure antworten

          binär: ich habe die bilddatei mit einem hex-editor geöffnet, und dann die daten der cgi-variable, die das bild beschreiben (nicht den header der codierung), mit denen des bildes im hex-editor verglichen - nicht identisch. so beginnt das jpg-bild binär mit FF D8 FF (in hexadezimal-repräsentation), die bilddaten laut cgi mit A0 CF A0.

          base64: habe im web ein seite gefunden, mit der man beliebige daten - auch files - ins base64 format encoden/decoden kann. habe das bild mit hilfe dieser seite encoded, und mit dem inhalt der cgi variablen verglichen - wieder nicht identisch.
          dann habe ich den inhalt der variablen von der seite deocden lassen - es  kam nicht das bild raus. die seite funktiniert was die base64 kodierung/dekodierung betrifft - habe das mit anderen seiten/tools gegengecheckt.

          also schliesse ich aus meinen versuchen, dass die daten weder binär noch base64 codiert sind :-) oder habe ich was üebrsehen?

      2. Hallo,

        Die Codierung des Bildes scheint weder binär, noch base64 zu sein.

        Lt. Deinem Form-Attribut ist der MIME-Type: multipart/form-data

        Siehe auch die RFC, die Sven vorhin gepostet hat.

        Viele Grüße,
        Horst Haselhuhn