in oss-20190517/src/main/java/com/aliyun/sdk/service/oss20190517/encryption/internal/CryptoModuleBase.java [42:65]
public <ReturnT> CompletableFuture<ReturnT> getObjectSecurely(GetObjectRequest request, Map<String, String> headers, AsyncResponseHandler<GetObjectResponse, ReturnT> responseHandler) {
long[] desiredRange = Utils.parseRange(request.getRange());
long[] cryptoRange = Utils.calcCryptoRange(desiredRange);
long contentLength = Long.parseLong(Optional.ofNullable(headers.get("Content-Length")).orElse("-1"));
if (cryptoRange != null) {
request = request.toBuilder()
.range(Utils.toRangeString(cryptoRange))
.headerParam("x-oss-range-behavior", "standard")
.build();
}
CryptoCipher cryptoCipher = createDecryptCryptoCipher(
createContentMaterialFromMetadata(headers),
cryptoRange, 0);
final AsyncDecryptResponseHandler<GetObjectResponse, ReturnT> handler = new AsyncDecryptResponseHandler(responseHandler,
desiredRange, cryptoRange, contentLength, cryptoCipher);
return ossDirect.getObjectWithAsyncResponseHandler(request, handler).thenCompose(result -> {
if (handler.getLastException() != null) {
CompletableFuture<ReturnT> future = new CompletableFuture<>();
future.completeExceptionally(handler.getLastException());
return future;
}
return CompletableFuture.completedFuture(result);
});
}