Michael: File-Upload in C

Beitrag lesen

Hallo H-P Ortner!

Ja, vollkommen richtig, ich kann am Webserver mehrere HTML-Seiten ablegen.  Da gibt es 2 Möglichkeiten, entweder der Webserver findet die Datei im Flash der Motorsteuerung oder er schaut in seinem C-Programm nach, ob er die Seite dynamisch generieren soll.

Um das besser zu verstehen hier mal kurz wie die steuerung gangbar gemacht wird und meiner Meinung nach funktioniert:

Meine Motorsteuerung wird in 2 Schritten programmiert.
1. Ich schicke alle Dateien die für den Aufbau einer statischen HTML-Datei zuständig sind in den Flash der Steuerung.
2. Ich schicke meinen kompeliertes C-File in die Steuerung. Das C-File entählt dabei meinen Webserver.

Kommt eine Anforderung des Webbrowsers an meine Motorsteuerung, dann prüft der Webserver der Motorsteuerung zuerst ob es so eine Datei im Flash gibt. Wenn ja wird diese Seite übertragen, wenn nein wird im Webserver geschaut, ob es sich hier um einen Dynamische Webseite handelt. Ist eine dynamische Webseite nicht vorhanden, dann schickt der Webserver eine Webseite mit einer Fehlermeldung heraus, mit dem Inhalt, dass die Seite nicht gefunden werden konnte. Wurde eine dynamische Seite gefunden, dann wird der für die Seite entsprechende C-Code abgearbeitet.

Die Überprüfung ob eine dynamische Seite vorhanden ist oder nicht wird in dem C-Programm über eine if-Anweisung realisiert:
if (!strcmp(url,"motorsteuerung3.html"))

Handelt es sich also um die dynamische Web-Seite wie im Beispiel motorsteuerung3.html, dann kann man nun im C-Programm programmieren was weiter passieren soll.
So ist hier das Erste was gewöhnlicherweise gemacht wird die Übergabe der CGI-Werte. Dies wird nun wieder mit einer C-Funkton realisiert, die mir in meinem kleienn C-Web-Server mitgeliefert wurde:
r_get_cgi_param(url_and_args,"x_step_char",x_step_char);
Diese Funktion übergibt der Variablen x_step_char, welche vorher im C-Programm als Char deklariert wurde, den wert x_step_char über die CGI.  Nun kann ich den Wert x_step_char in meinem C-Programm weiter verarbeiten.

Um also auf deine Frage zurückzukommen, wie ich denn die CGI Schnittstelle anspreche: Nun Mein Webserver hat eine Funktion, welche die CGI Schnittstelle darstellen soll, sprich die Übergabe der Werte an mein C-Programm übernimmt.

Heute bin ich dann mal dieser CGI-Funktion r_get_cgi_param nachgegangen, wo sie denn eigentlich ihre Werte herbekommt. Natürlich wieder von einer anderen Funktion, die die gesamten Werte des Browsers aufnimmt.

Diese gesamten Werte habe ich mir anzeigen lassen und festgestellt, dass der Browser den Inhalt der Datei wohl nicht mit übergibt:

Dazu habe ich die Datei mit 2 Verschieden Methoden versucht an den Server zu übertragen:
1. Methode: Versuch d:\test1.txt herunterzuladen mit:

<form action="http://10.97.1.16/motorsteuerung4.html" enctype="multipart/form-data">
<p><br>
<input name="Datei" type="file" size="50" maxlength="100000" accept="text/*">
</p>
</form>

Das was mein Webserver an Daten bekommt lautet:
GET /motorsteuerung4.html?Datei=D%3A%5Ctest1.txt http/1.1\r\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoin, application/msword, application/x-shockwave-flash, */*\r\nAccept-Language:dernAccept-Encoding: gzip,deflate\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\nHost: 10.97.1.16\r\nConnection: Keep-alive\r\n\r\n

Wie man sieht stehen keine Inhalte der Datei drin, denn dann müsst irgendwo stehen  test1.txt:
111 222 333 aaa bbb ccc
111 222 333 aaa bbb ccc
111 222 333 aaa bbb ccc
111 222 333

2. Methode: Versuch d:\test1.txt herunterzuladen mit:
<form method="POST" action="http://10.97.1.16/motorsteuerung4.html" enctype="multipart/form-data" target="_new">
<input type="file" name="File" size="50"><br>
<input type="submit" value="DATEIUPLOAD STARTEN" name="Submit">
</form>

Das was mein Webserver hier an Daten bekommt lautet:

POST /motorsteuerung4.html HTTP/1.1\r\nAccept: /*\r\nAccept-Language: de\r\nContnet-Type. Multipart/form-data; boundary=_______________7d31b3b10300152\r\nAccept-Encoding: gzip, deflate\r\nUser-Agent:Mozilla\4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\nHost()

Ja, also auch hier keine Daten meiner Datei.
Liege ich da falsch in der Annahme, dass der Browser den Inhalt der Daten nicht mit übergibt? Vielleicht muss ich nur wo anders suchen oder der Browser wartet auf ein Befehl vom Web-Server, so dass der Browser die Daten endlich nachschicken kann? Was meinst du?

Viele Grüße,
Michael