cpp-httplib實現文件上傳


上面的靜態文件服務實現了文件的下載,下面實現一下文件的上傳upload
參考:examples目錄下的upload.cc

#include <httplib.h>
#include <iostream>
#include <fstream>

using namespace httplib;
using namespace std;

const char *html = R"(
                   <form id="formElem">
                   <input type="file" name="image_file" accept="image/*"><br>
                   <input type="file" name="text_file" accept="text/*"><br>
                   <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.set_base_dir("./");

    /// upload
    svr.Get("/upload", [](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");
    });


    /// listen
    svr.listen("localhost", 1234);
}

 

文件被上傳,服務端接收到請求后將文件數據寫到文件中去。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM