drogon学习记录
drogon学习记录
[toc]
安装 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命令:
brew install drogonframework/drogon/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
方法可以传字符串,也可以不传。
如果不传字符串,文件默认保存在程序运行的目录。
如果传入字符串,则文件保存在字符串指定的目录,如果当前系统没有该目录,程序会自动生成该目录