oat++ 解决用户上传文件及获取文件名的解决方法

        这里先给出oat++ 中获取用户上传文件的官方文档 官方网址

        官方最简单的是以下这个

#include "oatpp/core/data/stream/FileStream.hpp"

...

ENDPOINT("POST", "/upload", upload, REQUEST(std::shared_ptr<IncomingRequest>, request)) {
    oatpp::data::stream::FileOutputStream fileOutputStream("/path/to/file");
    request->transferBodyToStream(&fileOutputStream); // transfer body chunk by chunk
    return createResponse(Status::CODE_200, "OK");
}

        用户只需要提供文件的位置即可。

        如果想获取用户上传的文件名,可以用以下代码

    ENDPOINT("POST", "datasets/upload", upload, REQUEST(std::shared_ptr<IncomingRequest>, request)) {
          /* Prepare multipart container. */
    auto multipart = std::make_shared<multipart::PartList>(request->getHeaders());
        /* Create multipart reader. */
    multipart::Reader multipartReader(multipart.get());

    /* Configure to read part with name "part1" into memory */

    multipartReader.setPartReader("mimiz", multipart::createInMemoryPartReader(-1));

    /* Read multipart body */
    request->transferBody(&multipartReader);
        /* Print value of "part1" */
    auto part1 = multipart->getNamedPart("mimiz");

    
    /* Assert part is not null */

    OATPP_ASSERT_HTTP(part1, Status::CODE_400, "part1 is null");

    auto filename  = part1->getFilename();
    OATPP_LOGD("test", "%s", filename.getValue("").c_str());

    oatpp::data::stream::FileOutputStream fileOutputStream(std::string("/root/pro_bz/data/" + filename.getValue("")).c_str());
    fileOutputStream.writeSimple(part1->getPayload()->getInMemoryData());

    return createResponse(Status::CODE_200, "OK");
  }

        其中filename就是用户上传的文件名,当用户使用postman测试的时候一定要保证key为mimiz

        成功!

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值