From b0a358a5f2ee27c052c163606a20135f37761884 Mon Sep 17 00:00:00 2001 From: Aleksey Veresov Date: Fri, 11 Oct 2019 14:35:34 +0300 Subject: . --- examples/upload.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 examples/upload.c (limited to 'examples/upload.c') diff --git a/examples/upload.c b/examples/upload.c new file mode 100644 index 0000000..9dc1efd --- /dev/null +++ b/examples/upload.c @@ -0,0 +1,73 @@ +#include +#include +#include +#include +#include + +void tempfile_callback(struct magi_field *field, char *buffer, int len) +{ + static FILE *file = 0; + if (!strcmp(field->name, "data")) { + if (!file) { + remove(field->name); + file = fopen(field->name, "wb"); + } + if (len) { + fwrite(buffer, 1, len, file); + } + if (len < magi_parse_multipart_callback_size) { + fclose(file); + file = 0; + } + } else if (len) { + field->data = realloc(field->data, field->len + len + 1); + memcpy(field->data + field->len, buffer, len); + field->len += len; + field->data[field->len] = 0; + } +} + +void handle_request() +{ + struct magi_request request; + if (magi_request_build_cgi(&request, tempfile_callback, 0)) { + struct magi_field *name = magi_field_list_get(request.fields, "name"); + struct magi_field *data = magi_field_list_get(request.fields, "data"); + if (name && name->data && data) { + rename("data", name->data); + } + magi_request_destroy(&request); + } +} + +void print_preamble() +{ + puts("Content-type: application/xhtml+xml\r\n\r\n"); +} + +void print_webpage() +{ + puts( + "" + "" + "Upload File" + "" + "
" + "" + "" + "" + "
" + "" + "" + ); +} + +int main(int argc, char const *argv[]) +{ + handle_request(); + print_preamble(); + print_webpage(); + return 0; +} -- cgit v1.2.3