Ventus: File Upload mit CGI und C

Hallo,

suche schon seit längerem erfolglos in Google etwas zu dem Thema.

Wie kann man einen File upload in cgi mit c realisieren.

Gruß

  1. Hallo Ventus,

    Wie kann man einen File upload in cgi mit c realisieren.

    die entsprechende Spezifikation behandelt die einzelnen Umgebungsvariablen, auf die im Umgang des CGI zurückgreifen kannst. Ob Du nun mit getenv() arbeitest oder wie folgt vorgehst, ist IMHO Geschmackssache:

      
    int main(int argc, char **argv, char **env){}  
    
    

    Den upload stream nimmt man am sdtin entgegen. Dabei gibt es aber einiges mehr zu beachten, weil die Daten erst noch aufbereitet werden wollen. Dazu arbeite Dich in die RFC 2388 ein!

    Vielleicht noch ganz nützlich zur Untermauerung: http://forum.de.selfhtml.org/archiv/1998/12/t1482/#m6291, Kapitel 26 CGI mit C (C von A bis Z von Jürgen Wolf), http://forum.de.selfhtml.org/archiv/2008/6/t172094/#m1127415

    Gruß aus Berlin!
    eddi

  2. Hi Ventus!

    Also, so wie ich das sehe, benötigtst du zunächst: http://de.selfhtml.org/html/formulare/datei_upload.htm#definieren

    So, jetzt kommt das File als post Parameter in deinen CGI Kontext rein. Dies wird in Perl so gelesen (vergleiche hierzu auch das Beispiel:
    http://aktuell.de.selfhtml.org/artikel/cgiperl/file-upload/index.htm

    die datei-daten holen

    my $file = $cgi->param("Datei");

    Es bleibt also noch als "magische Frage", wie du mit einem C CGI auf post Parameter zugreifen kannst. Wie dies grundsätzlich geht, erfährt man (durch google) hier:
    http://www.ssw.uni-linz.ac.at/Teaching/Lectures/Sem/2000/Muehlehner/
    Quote: POST macht es erforderlich, die Eingaben über STDIN auszulesen. Da der Zeichenstrom nicht durch ein spezielles Terminationssymbol abgeschlossen wird, ist es notwendig, zuerst die Länge des Zeichenstroms über die Umgebungsvariable CONTENT_LENGTH zu ermitteln.
    (...)
    C:
    size_of_form_information = getenv("CONTENT_LENGTH")
    fread(myRequest, size_of_form_information, 1, stdin)

    Ansonsten findest du ein fertiges CGI C Modul unter http://www.boutell.com/cgic/
    Dabei ist in der Funktionsreferenz eventuell besonders folgende Funktionen von Interesse http://www.boutell.com/cgic/#functions:
    Alle Funktionen der Art: cgiFormResultType cgiFormFile[...]

    Dann viel Erfolg,
    Richard