drogon学习记录

安装 ubuntu安装drogon命令:

apt install git gcc g++ cmake libjsoncpp-dev uuid-dev openssl libssl-dev zlib1g-dev postgresql-all libmariadbclient-dev postgresql-all -y 
git clone https://github.com/an-tao/drogon
cd drogon
git submodule update --init
mkdir build
cd build
cmake ..
make && sudo make install

ps 这条命了最后一个装的是pg的数据库,如果是mysql 和 sqllit或者其他的话请上drogon官网自己看一下装什么驱动

macos安装drogon命令:

因为已经装好了又不好卸载 所以就暂时不写了

drogon文件上传

文件上传的一般来说使用formdata

当然 也是可以用json的,只不过需要把文件转换成base64码而已

formdata文件上传

引用官方的列子

[](const HttpRequestPtr &req,
           std::function<void(const HttpResponsePtr &)> &&callback) {
            MultiPartParser fileUpload;
            if (fileUpload.parse(req) != 0 || fileUpload.getFiles().size() != 1)
            {
                auto resp = HttpResponse::newHttpResponse();
                resp->setBody("Must only be one file");
                resp->setStatusCode(k403Forbidden);
                callback(resp);
                return;
            }

            auto &file = fileUpload.getFiles()[0];
            auto md5 = file.getMd5();
            auto resp = HttpResponse::newHttpResponse();
            resp->setBody(
                "The server has calculated the file's MD5 hash to be " + md5);
            file.save();
            LOG_INFO << "The uploaded file has been saved to the ./uploads "
                        "directory";
            callback(resp);
        }

官方在这里是把其写成了一个匿名函数,放在cli创建的代码里,其实就是contorllers里面的一个实现。

可以看到的是,通过MultiPartParser对req进行解析可以判断里面是否有文件,通过MultiPartParser::getFiles().size()的方法可以获取文件的数目

MultiPartParser::getFiles()可以获得文件数组

其中的一个对象,可以通过save方法进行保存,save方法可以传字符串,也可以不传。

如果不传字符串,文件默认保存在程序运行的目录。

如果传入字符串,则文件保存在字符串指定的目录,如果当前系统没有该目录,程序会自动生成该目录