CGI -> File Upload
Persil
- cgi
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ür File-Upload - formfile.html</TITLE>
</HEAD>
<BODY>
<P>
Das folgende Formular ermö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
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
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