Как загрузить файл в AWS S3 с помощью preigend url и Aws :: FStream? - PullRequest
0 голосов
/ 24 января 2019

Я хочу загрузить файл из моей системы на сервер AWS S3.Я использую предопределенный URL, который позволяет мне загружать файл.

Это должно происходить с потоком, потому что мы хотим сжать файл во время загрузки в будущем.Я попытался использовать 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 голосов
/ 24 января 2019

Мне удалось решить проблему.

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