| // |
| // upload.cc |
| // |
| // Copyright (c) 2019 Yuji Hirose. All rights reserved. |
| // MIT License |
| // |
| |
| #include <fstream> |
| #include <httplib.h> |
| #include <iostream> |
| using namespace httplib; |
| using namespace std; |
| |
| const char *html = R"( |
| <form id="formElem"> |
| <input type="file" name="image_file" accept="image/*"> |
| <input type="file" name="text_file" accept="text/*"> |
| <input type="submit"> |
| </form> |
| <script> |
| formElem.onsubmit = async (e) => { |
| e.preventDefault(); |
| let res = await fetch('/post', { |
| method: 'POST', |
| body: new FormData(formElem) |
| }); |
| console.log(await res.text()); |
| }; |
| </script> |
| )"; |
| |
| int main(void) { |
| Server svr; |
| |
| svr.Get("/", [](const Request & /*req*/, Response &res) { |
| res.set_content(html, "text/html"); |
| }); |
| |
| svr.Post("/post", [](const Request &req, Response &res) { |
| auto image_file = req.get_file_value("image_file"); |
| auto text_file = req.get_file_value("text_file"); |
| |
| cout << "image file length: " << image_file.content.length() << endl |
| << "image file name: " << image_file.filename << endl |
| << "text file length: " << text_file.content.length() << endl |
| << "text file name: " << text_file.filename << endl; |
| |
| { |
| ofstream ofs(image_file.filename, ios::binary); |
| ofs << image_file.content; |
| } |
| { |
| ofstream ofs(text_file.filename); |
| ofs << text_file.content; |
| } |
| |
| res.set_content("done", "text/plain"); |
| }); |
| |
| svr.listen("localhost", 1234); |
| } |