From ceb2f1da41d1876132b0753291f57ecf4bee5df8 Mon Sep 17 00:00:00 2001 From: Sergey Lyubka <sergey.lyubka@cesanta.com> Date: Mon, 20 Mar 2017 17:14:39 +0000 Subject: [PATCH] Update upload example PUBLISHED_FROM=a28c1da3f0dd597792439246313ca39984ab7536 --- examples/big_upload/big_upload.c | 61 +++---------------- .../{ajax_upload_demo => }/index.html | 9 +++ 2 files changed, 18 insertions(+), 52 deletions(-) rename examples/big_upload/{ajax_upload_demo => }/index.html (80%) diff --git a/examples/big_upload/big_upload.c b/examples/big_upload/big_upload.c index 5514d7b75..563436503 100644 --- a/examples/big_upload/big_upload.c +++ b/examples/big_upload/big_upload.c @@ -17,22 +17,6 @@ struct file_writer_data { size_t bytes_written; }; -static void handle_request(struct mg_connection *nc) { - // This handler gets for all endpoints but /upload - mg_printf(nc, "%s", - "HTTP/1.1 200 OK\r\n" - "Content-Type: text/html\r\n" - "Connection: close\r\n" - "\r\n" - "<html><body>Upload example." - "<form method=\"POST\" action=\"/upload\" " - " enctype=\"multipart/form-data\">" - "<input type=\"file\" name=\"file\" /> <br/>" - "<input type=\"submit\" value=\"Upload\" />" - "</form></body></html>"); - nc->flags |= MG_F_SEND_AND_CLOSE; -} - static void handle_upload(struct mg_connection *nc, int ev, void *p) { struct file_writer_data *data = (struct file_writer_data *) nc->user_data; struct mg_http_multipart_part *mp = (struct mg_http_multipart_part *) p; @@ -83,54 +67,27 @@ static void handle_upload(struct mg_connection *nc, int ev, void *p) { } static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) { - (void) ev_data; - if (ev == MG_EV_HTTP_REQUEST) { - mg_printf(nc, "%s", - "HTTP/1.1 200 OK\r\n" - "Content-Type: text/html\r\n" - "Connection: close\r\n" - "\r\n" - "<html><body>Upload example." - "Navigate to <a " - "href=\"simple_upload_demo\">/simple_upload_demo</a> for " - "uploading using submit " - "or to <a href=\"/ajax_upload_demo\">/ajax_upload_demo</a> for " - "uploading using ajax" - "</form></body></html>"); - nc->flags |= MG_F_SEND_AND_CLOSE; - } -} - -static void upload_demo_handler(struct mg_connection *nc, int ev, void *p) { if (ev == MG_EV_HTTP_REQUEST) { - (void) p; - handle_request(nc); - } -} - -static void ajax_demo_handler(struct mg_connection *nc, int ev, void *p) { - if (ev == MG_EV_HTTP_REQUEST) { - mg_serve_http(nc, (struct http_message *) p, s_http_server_opts); + mg_serve_http(nc, ev_data, s_http_server_opts); } } int main(void) { struct mg_mgr mgr; - struct mg_connection *nc; + struct mg_connection *c; mg_mgr_init(&mgr, NULL); - nc = mg_bind(&mgr, s_http_port, ev_handler); + c = mg_bind(&mgr, s_http_port, ev_handler); + if (c == NULL) { + fprintf(stderr, "Cannot start server on port %s\n", s_http_port); + exit(EXIT_FAILURE); + } s_http_server_opts.document_root = "."; // Serve current directory - - mg_register_http_endpoint(nc, "/upload", handle_upload MG_UD_ARG(NULL)); - mg_register_http_endpoint(nc, "/ajax_upload_demo", - ajax_demo_handler MG_UD_ARG(NULL)); - mg_register_http_endpoint(nc, "/simple_upload_demo", - upload_demo_handler MG_UD_ARG(NULL)); + mg_register_http_endpoint(c, "/upload", handle_upload MG_UD_ARG(NULL)); // Set up HTTP server parameters - mg_set_protocol_http_websocket(nc); + mg_set_protocol_http_websocket(c); printf("Starting web server on port %s\n", s_http_port); for (;;) { diff --git a/examples/big_upload/ajax_upload_demo/index.html b/examples/big_upload/index.html similarity index 80% rename from examples/big_upload/ajax_upload_demo/index.html rename to examples/big_upload/index.html index 9ba5d63c7..c162c653a 100644 --- a/examples/big_upload/ajax_upload_demo/index.html +++ b/examples/big_upload/index.html @@ -35,6 +35,15 @@ </head> <body> + <h1>Upload file using standard form upload</h1> + + <form method="POST" action="/upload" enctype="multipart/form-data"> + <label>Select a file:</label><br> + <input type="file" name="file" /> + <input type="submit" value="Upload" /> + </form> + + <h1>Upload file using Ajax - that also gives progress report</h1> <form method="post" id="filename" name="filename" onsubmit="return uploadFile();"> <label>Select a file:</label><br> <input type="file" id="file" name="file" required /> -- GitLab