Persil: CGI -> File Upload

halli hallo,

ich habe ein kleines (befüchte gar ein großes) verständnisproblem.
ich erstelle CGI-Anwendungen mit C++.

Nun versuche ich allerdings eine Datei über ein Formular zu uploaden und diese auf meine webserver in einem verzeichnis abzulegen.

ein entsprechendes Formular hab ich schon erstellt.

hier der code:
----------------------------------------------
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<TITLE>Beispielformular f&uuml;r File-Upload - formfile.html</TITLE>
</HEAD>
<BODY>
<P>
Das folgende Formular erm&ouml;glicht nach einer Texteingabe einen Fileupload
zum Server:
<form METHOD=POST ACTION=http://webserev/cgi-bin/downupload.exe>
<TABLE BORDER=0>
<CAPTION>
Formular:
</CAPTION>
<TR>
<TD>Eingabetext:</TD>
<TD>
<INPUT TYPE=text name=text></TD>
</TR>
<TR>
<TD>Dateiname:</TD>
<TD>
<INPUT TYPE=file name=files></TD>
</TR>
<TR>
<TD>
<INPUT TYPE=submit VALUE=Senden></TD>
<TD></TD>
</TR>
</TABLE>
</FORM>
<P>
</BODY></HTML>

---------------------------------------------------

meine eigentlich frage ist: was muss ich tun (konfiguration am server eingeschlossen), wenn meine Anwendung die die Daten per "Post" entgegen nimmt tun? macht IIS 4 alles und transferiert die Datei schon? Wenn ja, wo hin?  kann mir jemand bitte ein wenig Background geben. Ich hab mich schon durch foren gekämpft und nichts passendes gefunden. viele behandeln CGI/PHP-Skripts. bin für einen link auch sehr verbunden.

lg

persil

  1. Halihallo Persil

    Nun versuche ich allerdings eine Datei über ein Formular zu uploaden und diese auf meine webserver in einem verzeichnis abzulegen.

    C kann sowohl die Standard Eingabe (stdin) lesen, wie auch eine Datei
    auf dem Webserver erstellen. Insofern sind die Voraussetzungen da...

    <form METHOD=POST ACTION=http://webserev/cgi-bin/downupload.exe>

    <form ... type="multipart/form-data">

    Die Daten müssen unter Verwendung vom multipart/form-data MIME-Typ
    kodiert sein, ansonsten kannst du keine Dateien übertragen, sondern
    nur deren Dateiname (AFAIK).

    meine eigentlich frage ist: was muss ich tun (konfiguration am server eingeschlossen), wenn meine Anwendung die die Daten per "Post" entgegen nimmt tun?

    Über POST werden alle Daten, die der Client sendet in stdin, der
    Standardeingabe zur Verfügung gestellt. Du kannst also einfach stdin
    einlesen (getenv("CONTENT_LENGTH") Bytes) und die kodierten Daten
    dort encodieren. Den Dateiinhalt kannst du dann in die Datei auf dem
    Webserver speichern.

    Zum Verständnis der Kodierung:
    http://www.ietf.org/rfc/rfc2388.txt
    http://www.ietf.org/rfc/rfc1867.txt

    Viele Grüsse

    Philipp

    1. halihallo Philipp,

      vielen Dank für deine schnelle Hilfe.

      ich bekomme es aber irgendwie nicht hin.

      also so hol ich mir die Daten..
      dummerweise kommen da aber gar keine daten bezüglich der datei:

      char * buf;
       int i;
       int nDatenLaenge;
       char * cDaten;

      buf=getenv("CONTENT_LENGTH");
        nDatenLaenge=atoi(buf);
        cDaten=(char*)malloc(nDatenLaenge+1);
        buf=cDaten;
        for (i=0;i<nDatenLaenge;i++)
         buf[i]=fgetchar();
        buf[i]='\0';
        pIntranetDaten->sDaten=buf;

      was mach ich denn falsch ?
      gruß persil