| Überblick
Mit dem im folgenden vorgestellten Objekt ist es möglich, Dateien per HTTP-Formular (nach RFC 1867) auf einen Web-Server heraufzuladen. Obwohl der Sourcecode bei uns nie wirklich für diesen Zweck zum Einsatz kam, hat er sich doch immer als sehr sinnvoll erwiesen - erst diente er als abschreckendes Beispiel für schlechten Programmierstil, später als Beispiel für unkonventionelle aber performante Programmierung mit JScript und zum Schluß zur Demonstration der Erstellung eigener Objekte in JScript.
Lassen Sie sich aber dadurch nicht verunsichern, Sie können den Code auch ganz einfach zum schnellen, unkomplizierten Upload von Dateien verwenden... ;-)
Wie funktionieren Datei-Uploads eigentlich?
Um Dateien per HTTP-Formular versenden zu können, müssen die zu übertragenden Daten vom Browser als 'multipart/form-data' (RFC 1867) verpackt werden, dies basiert auf den allgemeinen Regel für Multipart-MIME-Typen, wie sie im RFC 1523 beschrieben sind.
Mitgeteilt wird dem Browser dies über die Angabe des encoding types (ENCTYPE); eine entsprechende HTML-Seite könnte wie folgt aussehen:
<html>
<head>
<title>Upload-Test</title>
</head>
<body>
<FORM NAME="MyForm" METHOD="post" ACTION="upload.asp" ENCTYPE="multipart/form-data">
<INPUT TYPE="text" NAME="Vorname" SIZE="20"><br>
<INPUT TYPE="text" NAME="Nachname" SIZE="20"><br>
<INPUT TYPE="File" NAME="Bild"><br>
<INPUT TYPE="Submit" VALUE="Upload">
</FORM>
</body>
</html>
Ein 'multipart/form-data'-Dokument besteht aus verschiedenen Teilen, die durch eine sogenannte Boundary voneinander getrennt sind und jeweils eine Header-Zeile mit folgendem Aufbau enthalten:
content-disposition: form-data; name="feld1"; [filename="dateiname1"]
Die Angabe des 'filename' ist hierbei optional.
Bei Dateien folgt in der nächsten Zeile der Content-Type und nach einer Leerzeile der eigentliche Dateiinhalt, bei einem normalen Formularelement entfällt einfach der Content-Type. Ein typisches Beispiel, das der Server vom Browser beim Senden des obigen Formulares empfängt, könnte also wie folgt aussehen:
Content-Type: multipart/form-data; boundary=---------------------------7d22e3382244
-----------------------------7d22e3382244
Content-Disposition: form-data; name="Vorname"
Olaf
-----------------------------7d22e3382244
Content-Disposition: form-data; name="Nachname"
Lüder
-----------------------------7d22e3382244
Content-Disposition: form-data; name="Bild"; filename="C:\Bilder\Bild01.jpg"
Content-Type: image/pjpeg
<Inhalt der Datei...>
-----------------------------7d22e3382244-- |