Я использую 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>