mirror of
https://github.com/cesanta/mongoose.git
synced 2026-10-12 10:13:29 +00:00
Update upload example
PUBLISHED_FROM=a28c1da3f0dd597792439246313ca39984ab7536
This commit is contained in:
committed by
Cesanta Bot
parent
aab857a66e
commit
ceb2f1da41
@@ -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 (;;) {
|
||||
|
||||
@@ -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 />
|
||||
Reference in New Issue
Block a user