Как загрузить объект в AWS S3 с помощью «Transfer-Encoding: chunked» - PullRequest
0 голосов
/ 30 января 2020

Я использую awssdk для c ++ для загрузки данных в корзину S3. Я использую метод PutObject() класса Aws::S3::S3Client для загрузки данных.

Однако, прежде чем загружать данные, мне нужно знать длину содержимого загружаемых данных. Мне нужно либо установить длину содержимого в запросе (запрос имеет тип Aws::S3::Model::PutObjectRequest). Или библиотека awssdk попытается определить размер тела самостоятельно (awssdk делает это путем поиска конца данных полезной нагрузки, чтобы прочитать его размер).

В любом случае, в моем случае я не еще знаю, сколько контента я загружаю. Я работаю на сервере, который сжимает данные. Мне нужно дождаться окончания сжатия, чтобы узнать окончательный размер сжатых данных. Я не хочу ждать этого. Вместо этого я хочу начать загрузку на S3 по мере создания сжатых данных. Для этого можно использовать «Transfer-Encoding: chunked» при отправке HTTP-запроса на сервер S3.

Есть ли способ использовать Aws::S3::S3Client для загрузки данных с помощью "Transfer-Encoding: chunked"? *

Я скачал исходник awssdk для c ++, немного его подправил, чтобы принудительно отправить «Transfer-Encoding: chunked» в запросе http. Но сервер S3 возвратил код ошибки HTTP 501 Не реализовано:

<?xml version="1.0" encoding="UTF-8"?>
<Error>
    <Code>NotImplemented</Code>
    <Message>A header you provided implies functionality that is not implemented</Message>
    <Header>Transfer-Encoding</Header>
    <RequestId>8F55B09D484DD66C</RequestId>
    <HostId>gZk6zaPcObsTfclz0zXvKGtPT5udzDKigIrm7laD3csG30vhx3pa0eFFS8nh6t9k7XkDeJRm9Z4=</HostId>
</Error>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...