gpt4 book ai didi

c++ - 如何使用预签名的 url 和 Aws::FStream 将文件上传到 AWS S3?

转载 作者:太空宇宙 更新时间:2023-11-04 12:40:36 24 4
gpt4 key购买 nike

我想将文件从我的系统上传到 AWS S3 服务器。我正在使用允许我上传文件的预签名 url。

它必须在流中发生,因为我们希望将来在上传期间对文件进行 gzip 压缩。我尝试使用 HttpClientFactory 并能够下载带有流的文件。

可悲的是,我卡在了上传过程中。我不确定如何使用能够从我的系统读取文件的流来填充请求。

我尝试使用 StreamFactory 填充请求,但无法使用我的 Aws::FStream 初始化请求。

auto url = client->GeneratePresignedUrl("bucketName", "s3Key", Aws::Http::HttpMethod::HTTP_POST, 3600);

static std::shared_ptr<Aws::Http::HttpClientFactory> MyClientFactory{};
auto MyHttpClient = Aws::Http::CreateHttpClient(getClientConfig());

const std::shared_ptr<Aws::Http::HttpRequest> req(
Aws::Http::CreateHttpRequest(url, Aws::Http::HttpMethod::HTTP_POST,
Aws::Utils::Stream::DefaultResponseStreamFactoryMethod));

std::shared_ptr<Aws::IOStreamFactory> streamfac;
Aws::New<Aws::FStream>("C:/Development/test3.txt", std::ios_base::in);

std::shared_ptr<Aws::IOStreamFactory>
//Stuck here: req->SetResponseStreamFactory(???)

最佳答案

我能够解决这个问题。

auto inStream = std::make_shared<boost::filesystem::fstream>(filepath, std::ios_base::in | std::ios_base::binary);

req->AddContentBody(inStream);

auto res = MyHttpClient->MakeRequest(req);

关于c++ - 如何使用预签名的 url 和 Aws::FStream 将文件上传到 AWS S3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54347341/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com