public CompletableFuture getObjectSecurely()

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);
        });
    }