Closed dongxiao1198 closed 1 month ago
https://github.com/volcengine/ve-tos-cpp-sdk/blob/b5ac7603e683f29735cb383b9aeef3612a489bb0/sdk/src/TosClientImpl.cc#L707
(input.getRangeStart() != 0 || input.getRangeEnd() != 0)的时候才像服务端发送range信息,但是目前的语意是读:[start, end]这样一个闭区间。 如果用户要读第一个字节且只读第一个字节就需要给[0, 0],此时会跳过这个逻辑,直接读整个文件。 随便写个demo可以复现:
void getObjectRange( const std::shared_ptr& client, const std::string& bucketName, const std::string& objectKey, int64_t start, int64_t end) { GetObjectV2Input input(bucketName, objectKey); input.setRangeStart(start); input.setRangeEnd(end); auto output = client->getObject(input); if (!output.isSuccess()) { std::cout << output.error().String() << std::endl; } std::cout << output.result().getContentLength() << std::endl; std::cout << output.result().getContent()->rdbuf() << std::endl; }
getObjectRange(cli, bucket, key, 0, 0); getObjectRange(cli, bucket, key, 0, 1);
请range_传递range信息,后续版本会将rangeStart_以及rangeEnd_废弃
https://github.com/volcengine/ve-tos-cpp-sdk/blob/b5ac7603e683f29735cb383b9aeef3612a489bb0/sdk/src/TosClientImpl.cc#L707
(input.getRangeStart() != 0 || input.getRangeEnd() != 0)的时候才像服务端发送range信息,但是目前的语意是读:[start, end]这样一个闭区间。 如果用户要读第一个字节且只读第一个字节就需要给[0, 0],此时会跳过这个逻辑,直接读整个文件。 随便写个demo可以复现:
void getObjectRange( const std::shared_ptr& client, const std::string& bucketName, const std::string& objectKey,
int64_t start, int64_t end) {
GetObjectV2Input input(bucketName, objectKey);
input.setRangeStart(start);
input.setRangeEnd(end);
auto output = client->getObject(input);
if (!output.isSuccess()) {
std::cout << output.error().String() << std::endl;
}
std::cout << output.result().getContentLength() << std::endl;
std::cout << output.result().getContent()->rdbuf() << std::endl;
}
getObjectRange(cli, bucket, key, 0, 0); getObjectRange(cli, bucket, key, 0, 1);