Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
M
mongoose
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Ganil-acq
GANILinux
linux-service
library
mongoose
Commits
6b4f7e78
Commit
6b4f7e78
authored
11 years ago
by
Sergey Lyubka
Browse files
Options
Downloads
Patches
Plain Diff
Added upload example
parent
73ed83c5
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
docs/Embed.md
+3
-2
3 additions, 2 deletions
docs/Embed.md
examples/Makefile
+3
-2
3 additions, 2 deletions
examples/Makefile
examples/upload.c
+38
-36
38 additions, 36 deletions
examples/upload.c
with
44 additions
and
40 deletions
docs/Embed.md
+
3
−
2
View file @
6b4f7e78
...
...
@@ -90,6 +90,7 @@ a couple of kilobytes to the executable size, and also has some runtime penalty.
Mongoose source code contains a well-commented example code, listed below:
*
[
hello.c
](
https://github.com/cesanta/mongoose/blob/master/examples/hello.c
)
is a minimalisti
ng
hello world example
is a minimalisti
c
hello world example
*
[
post.c
](
https://github.com/cesanta/mongoose/blob/master/examples/post.c
)
shows how to handle form input
*
[
upload.c
](
https://github.com/cesanta/mongoose/blob/master/examples/post.c
)
shows how to upload files
This diff is collapsed.
Click to expand it.
examples/Makefile
+
3
−
2
View file @
6b4f7e78
...
...
@@ -23,8 +23,8 @@ all:
$(
CC
)
qcomm.c ../mongoose.c
-o
qcomm
$(
CFLAGS
)
$(
CC
)
post.c ../mongoose.c
-o
post
$(
CFLAGS
)
$(
CC
)
multi_threaded.c ../mongoose.c
-o
multi_threaded
$(
CFLAGS
)
$(
CC
)
upload.c ../mongoose.c
-o
upload
$(
CFLAGS
)
# $(CC) upload.c ../mongoose.c -o upload $(CFLAGS)
# $(CC) -DUSE_WEBSOCKET websocket.c ../mongoose.c -o $@ $(CFLAGS)
# $(CC) chat.c ../mongoose.c -o chat $(CFLAGS)
# $(CC) lua_dll.c ../build/lua_5.2.1.c -o $@.so $(CFLAGS) $(DLL_FLAGS)
...
...
@@ -40,7 +40,8 @@ windows:
$(
CL
)
hello.c ../mongoose.c
$(
CLFLAGS
)
$(
LFLAGS
)
$(
CL
)
post.c ../mongoose.c
$(
CLFLAGS
)
$(
LFLAGS
)
$(
CL
)
multi_threaded.c ../mongoose.c
$(
CLFLAGS
)
$(
LFLAGS
)
# $(CL) upload.c ../mongoose.c $(CLFLAGS) $(LFLAGS)
$(
CL
)
upload.c ../mongoose.c
$(
CLFLAGS
)
$(
LFLAGS
)
# $(CL) /DUSE_WEBSOCKET websocket.c ../mongoose.c $(CLFLAGS) $(LFLAGS)
#$(CL) lua_dll.c $(CLFLAGS) $(DLL_FLAGS) /DLL $(LFLAGS) /SUBSYSTEM:WINDOWS /ENTRY:luaopen_lua_dll /EXPORT:luaopen_lua_dll /out:lua_dll.dll
...
...
This diff is collapsed.
Click to expand it.
examples/upload.c
+
38
−
36
View file @
6b4f7e78
...
...
@@ -5,48 +5,50 @@
#include
<string.h>
#include
"mongoose.h"
static
int
event_handler
(
struct
mg_event
*
event
)
{
if
(
event
->
type
==
MG_REQUEST_BEGIN
)
{
if
(
!
strcmp
(
event
->
request_info
->
uri
,
"/handle_post_request"
))
{
char
path
[
200
];
FILE
*
fp
=
mg_upload
(
event
->
conn
,
"/tmp"
,
path
,
sizeof
(
path
));
if
(
fp
!=
NULL
)
{
fclose
(
fp
);
mg_printf
(
event
->
conn
,
"HTTP/1.0 200 OK
\r\n\r\n
Saved: [%s]"
,
path
);
}
else
{
mg_printf
(
event
->
conn
,
"%s"
,
"HTTP/1.0 200 OK
\r\n\r\n
No files sent"
);
}
}
else
{
// Show HTML form. Make sure it has enctype="multipart/form-data" attr.
static
const
char
*
html_form
=
"<html><body>Upload example."
"<form method=
\"
POST
\"
action=
\"
/handle_post_request
\"
"
" enctype=
\"
multipart/form-data
\"
>"
"<input type=
\"
file
\"
name=
\"
file
\"
/> <br/>"
"<input type=
\"
submit
\"
value=
\"
Upload
\"
/>"
"</form></body></html>"
;
mg_printf
(
event
->
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
;
static
int
index_html
(
struct
mg_connection
*
conn
)
{
const
char
*
data
;
int
data_len
;
char
var_name
[
100
],
file_name
[
100
];
mg_printf_data
(
conn
,
"%s"
,
"<html><body>Upload example."
"<form method=
\"
POST
\"
action=
\"
/handle_post_request
\"
"
" enctype=
\"
multipart/form-data
\"
>"
"<input type=
\"
file
\"
name=
\"
file
\"
/> <br/>"
"<input type=
\"
submit
\"
value=
\"
Upload
\"
/>"
"</form>"
);
if
(
mg_parse_multipart
(
conn
->
content
,
conn
->
content_len
,
var_name
,
sizeof
(
var_name
),
file_name
,
sizeof
(
file_name
),
&
data
,
&
data_len
)
>
0
)
{
mg_printf_data
(
conn
,
"%s"
,
"Uploaded file:<pre>"
);
mg_send_data
(
conn
,
data
,
data_len
);
mg_printf_data
(
conn
,
"%s"
,
"/pre>"
);
}
// All other events left unprocessed
mg_printf_data
(
conn
,
"%s"
,
"</body></html>"
);
return
1
;
}
int
main
(
void
)
{
struct
mg_context
*
ctx
;
const
char
*
options
[]
=
{
"listening_ports"
,
"8080"
,
NULL
};
ctx
=
mg_start
(
options
,
event_handler
,
NULL
);
getchar
();
// Wait until user hits "enter"
mg_stop
(
ctx
);
struct
mg_server
*
server
;
// Create and configure the server
server
=
mg_create_server
(
NULL
);
mg_set_option
(
server
,
"listening_port"
,
"8080"
);
mg_add_uri_handler
(
server
,
"/"
,
index_html
);
// Serve request. Hit Ctrl-C to terminate the program
printf
(
"Starting on port %s
\n
"
,
mg_get_option
(
server
,
"listening_port"
));
for
(;;)
{
mg_poll_server
(
server
,
1000
);
}
// Cleanup, and free server instance
mg_destroy_server
(
&
server
);
return
0
;
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment