Home       Servicebereich  Projekte  Kontakt  

Das Upload Formular

Der Upload von Dateien wird seitens des Benutzerinterfaces mit einem Input-Feld in einem Formular gestaltet. Das Formular muß als HTTP- Übertragungsmethode POST angeben. Das Encoding des Forumlars wird mit dem Type multipart/form-data angebeben.

    <FORM action="/upload.php" 
        enctype="multipart/form-data"
        method="POST">

    <input type="file" name="filename" value="*.sxw" >
    <input type="submit" value="Upload">

    </FORM>
Beim Abschicken des Formulars erzeugt der Browser einen Request wie im folgenden beschrieben.

Der HTTP Request

Ein Formular mit Fileupload schickt einen speziellen POST-Request an den Server. Der Content-Type des Requests ist multipart/form-data mit einem zusätzlichen Boundary- String. Dieser String dient als Trennmarke, die die einzelnen Werte des abgeschickten Formulars und die übertragene(n) Datei(en) voneinander trennt.

Der Boundary- String darf im eigentlichen Content des Formulars und in den zu übertragenen Dateien nicht vorkommen, da sonst die übertragenen Werte nicht mehr eindeutig zugeordnet werden können. Der Client, in der Regel der Web-Browser errechnet eine zufällige Zeichenkette, die als Boundary eingsetzt wird.

  Content-Type: multipart/form-data; boundary=curlt8QjH+fl4hJXNwr7axn9G6Pn44P
Achtung! Die '--' des Boundary-Strings werden erst im Body des Requests benötigt.

Der Body des Requests

Der Body des Requests besteht im Gegensatz zum einfachen POST Request aus mehreren Abschnitten. In jedem dieser Abschnitte wird ein einzelner Formularparameter oder der Inhalt einer Datei übertragen. Die Abschnitte werden durch eine Zeile mit dem Boundary-String (z.B. --curlUbrP7pnAemzkERyg1qsTEtCAWW6) voneinander getrennt.

Die einzelnen Felder des Requests

In den einzelnen Feldern des Requests sind Header definiert, die die Verwendung dieses Abschnitts und eventuell den Content-Type definieren. Ein Formularfeld mit dem Namen ACTION und dem Wert storeDocument wird übertragen als:

  --curlt8QjH+fl4hJXNwr7axn9G6Pn44P
  Content-Disposition: form-data; name="ACTION"

  storeDocument
Hierbei wird der Header wie gewohnt mit einer Leerzeile (mit \r\n) vom eigentlichen Content getrennt.

Eine Datei wird in einem Feld übertragen, bei dem der Content-Disposition Header neben dem Feldnamen auch eine Option mit den Dateinamen enthält. Der Content-Type wird für diesen Teil auf multipart/form-data gesetzt.

  --curlUbrP7pnAemzkERyg1qsTEtCAWW6
  Content-Disposition: form-data; name="angebot"; filename="tpl.tar.gz"
  Content-Type: multipart/form-data

  alkjq1aß9081*=alkjakv§!% ...
  ...
Seitens des Servers wird der Request in seine Bestandteile zerlegt und entsprechenden Variablen zugeordnet, auf die der Anwendungsentwickler zugreifen kann.


< zurück  | weiter >