首页 > Web开发 > 详细

aws s3 上传 binary 数据 (通过stringstream)

时间:2020-01-17 22:10:17      阅读:107      评论:0      收藏:0      [点我收藏+]

有个需求需要将二进制istream上传到s3上暂存,但苦于没能直接找到接口,官方提供的设置数据块的接口如下:

inline void SetBody(const std::shared_ptr<Aws::IOStream>& body) { m_bodyStream = body; }
这个Aws::IOStream其实就是std::iostream的封装。
在实际寻找传入参数的时候没找到比较好的传入对象:fstream意味着我需要先将数据存到磁盘再去读取,感觉不是很好;而stringstream在装二进制数据的时候又可能出现截断的可能性。
最后我终于找到了https://www.ojit.com/article/829511这个解释,原来stringstream本身是可以存二进制数据流的,只不过这时候不能使用<<>>函数,需要使用std::stringstream::readstd::stringstream::write函数。
与此同时,从aws sdk的注解中我发现这个接口传入的数据aws都会当做二进制数据格式:binary/octet-stream 进行读取。这样的话,往s3上面写二进制流就没什么问题了。
大致代码如下:
std::shared_ptr<Aws::StringStream> input_data =
        Aws::MakeShared<Aws::StringStream>("");

    input_data->write(buffer.data(),srcSize);
    S3ClientWrapper *client = new S3ClientWrapper();
    std::string endpoint = "";
    ngmp::common::aws_client_configuration_info_struct config;
    client->Init(config);
    std::string errinfo;
    Aws::S3::S3Errors error_code;
    
    bool res = client->PutObject("bucket","object-name",input_data,errinfo, error_code,10);

 上面的代码包含了一部分aws sdk的封装代码,仅供参考。 

aws s3 上传 binary 数据 (通过stringstream)

原文:https://www.cnblogs.com/J1ac/p/12207253.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!