mirror of
https://github.com/cesanta/mongoose.git
synced 2026-11-13 17:00:19 +00:00
Update upload example
PUBLISHED_FROM=a28c1da3f0dd597792439246313ca39984ab7536
This commit is contained in:
1 parent
aab857a66e
commit
ceb2f1da41
2 files changed
+18
-52
No files matched your search
@@ -17,22 +17,6 @@ struct file_writer_data {
|
|||||||
size_t bytes_written;
|
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) {
|
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 file_writer_data *data = (struct file_writer_data *) nc->user_data;
|
||||||
struct mg_http_multipart_part *mp = (struct mg_http_multipart_part *) p;
|
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) {
|
static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) {
|
||||||
(void) ev_data;
|
|
||||||
if (ev == MG_EV_HTTP_REQUEST) {
|
if (ev == MG_EV_HTTP_REQUEST) {
|
||||||
mg_printf(nc, "%s",
|
mg_serve_http(nc, ev_data, s_http_server_opts);
|
||||||
"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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
struct mg_mgr mgr;
|
struct mg_mgr mgr;
|
||||||
struct mg_connection *nc;
|
struct mg_connection *c;
|
||||||
|
|
||||||
mg_mgr_init(&mgr, NULL);
|
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
|
s_http_server_opts.document_root = "."; // Serve current directory
|
||||||
|
mg_register_http_endpoint(c, "/upload", handle_upload MG_UD_ARG(NULL));
|
||||||
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));
|
|
||||||
|
|
||||||
// Set up HTTP server parameters
|
// 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);
|
printf("Starting web server on port %s\n", s_http_port);
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
|||||||
@@ -35,6 +35,15 @@
|
|||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<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();">
|
<form method="post" id="filename" name="filename" onsubmit="return uploadFile();">
|
||||||
<label>Select a file:</label><br>
|
<label>Select a file:</label><br>
|
||||||
<input type="file" id="file" name="file" required />
|
<input type="file" id="file" name="file" required />
|
||||||
Reference in new issue
Block a user