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 strtol
- typedef __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;
- }
|