如何使用预设URL和Aws :: FStream将文件上传到AWS S3?

时间:2019-01-24 13:04:01

标签: c++ amazon-web-services amazon-s3 stream aws-sdk

我想将文件从系统上传到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(???)

1 个答案:

答案 0 :(得分:0)

我能够解决问题。

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);