AWS s3 cpp sdk читает больше байтов, чем указанный диапазон

Используя AWS s3 cpp sdk, мы пытаемся читать данные из кода ниже. Когда мы указываем небольшой диапазон, используя

Aws::S3::Model::GetObjectRequest object_request;
object_request.SetRange(std::to_string(position) + "-" + std::to_string(position + nbytes));

Итак, что-то вроде 0 для начальной позиции и 4 для конечной позиции. Мы находим, что операция чтения фактически читает больше байтов, чем мы выделили в наш буфер. Итак, у нас есть файл длиной 69 байт. Если мы попытаемся прочитать первые 4 байта из него, результат, который возвращается из

auto results = this->s3Client->GetObject(object_request);

мы находим, что размер фактического чтения с сервера составлял 69 байт. Весь размер файла. Есть ли минимальное значение, которое sdk будет пытаться прочитать, когда вы указываете очень маленькие операции? Это значение где-то задокументировано?

Ниже приведена актуальная функция, которая пытается прочитать данные из s3.

arrow::Status S3ReadableFile::Read(int64_t nbytes, int64_t* bytesRead, uint8_t* buffer) {
Aws::S3::Model::GetObjectRequest object_request;

object_request.SetBucket(bucketName);
object_request.SetKey(key);
object_request.SetRange(std::to_string(position) + "-" + std::to_string(position + nbytes));

auto results = this->s3Client->GetObject(object_request);

if (!results.IsSuccess()) {
//TODO: Make bad arrow status here
*bytesRead = 0;
return arrow::Status::IOError("Unable to fetch object from s3 bucket.");
} else {
//byutes read should always be full amount
*bytesRead = nbytes; //should almost always be nBytes
memcpy(buffer, results.GetResult().GetBody().rdbuf(), *bytesRead);
position += *bytesRead;
return arrow::Status::OK();
}
}

Это частные члены класса S3ReadableFile

    std::shared_ptr<Aws::S3::S3Client> s3Client;
std::string bucketName;
std::string key;
size_t position;
bool valid;

0

Решение

Значение Range должно быть «bytes = 0-4». См .: https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35

0

Другие решения

Других решений пока нет …