| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 | /* Copyright (c) 2014 the Civetweb developers * Copyright (c) 2004-2012 Sergey Lyubka * This file is a part of civetweb project, http://github.com/bel2125/civetweb */#ifdef _WIN32#define _CRT_SECURE_NO_WARNINGS#include <windows.h>#include <io.h>#define strtoll strtoltypedef __int64 int64_t;#else#include <inttypes.h>#include <unistd.h>#endif /* !_WIN32 */#include <stdio.h>#include <string.h>#include <fcntl.h>#include <stdlib.h>#include "civetweb.h"/* callback: used to generate all content */static int begin_request_handler(struct mg_connection *conn){    const char * tempPath = ".";#ifdef _WIN32    const char * env = getenv("TEMP");    if (!env) env = getenv("TMP");    if (env) tempPath = env;#else    tempPath = "/tmp";#endif    if (!strcmp(mg_get_request_info(conn)->uri, "/handle_post_request")) {        mg_printf(conn, "%s", "HTTP/1.0 200 OK\r\n\r\n");        mg_upload(conn, tempPath);    } else {        /* Show HTML form. */        /* See http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1 */        static const char *html_form =            "<html><body>Upload example."            ""            /* enctype="multipart/form-data" */            "<form method=\"POST\" action=\"/handle_post_request\" "            "  enctype=\"multipart/form-data\">"            "<input type=\"file\" name=\"file\" /> <br/>"            "<input type=\"file\" name=\"file2\" /> <br/>"            "<input type=\"submit\" value=\"Upload\" />"            "</form>"            ""            "</body></html>";        mg_printf(conn, "HTTP/1.0 200 OK\r\n"                  "Content-Length: %d\r\n"                  "Content-Type: text/html\r\n\r\n%s",                  (int) strlen(html_form), html_form);    }    /* Mark request as processed */    return 1;}/* callback: called after uploading a file is completed */static void upload_handler(struct mg_connection *conn, const char *path){    mg_printf(conn, "Saved [%s]", path);}/* Main program: Set callbacks and start the server.  */int main(void){    /* Test server will use this port */    const char * PORT = "8080";    /* Startup options for the server */    struct mg_context *ctx;    const char *options[] = {        "listening_ports", PORT,        NULL};    struct mg_callbacks callbacks;    memset(&callbacks, 0, sizeof(callbacks));    callbacks.begin_request = begin_request_handler;    callbacks.upload = upload_handler;    /* Display a welcome message */    printf("File upload demo.\n");    printf("Open http://localhost:%s/ im your browser.\n\n", PORT);    /* Start the server */    ctx = mg_start(&callbacks, NULL, options);    /* Wait until thr user hits "enter", then stop the server */    getchar();    mg_stop(ctx);    return 0;}
 |