1
15
16 package software.amazon.awssdk.services.s3.internal.handlers;
17
18 import java.util.Optional;
19 import software.amazon.awssdk.annotations.SdkInternalApi;
20 import software.amazon.awssdk.core.SdkResponse;
21 import software.amazon.awssdk.core.interceptor.Context;
22 import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
23 import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
24 import software.amazon.awssdk.http.SdkHttpResponse;
25 import software.amazon.awssdk.services.s3.model.GetObjectRequest;
26 import software.amazon.awssdk.services.s3.model.GetObjectResponse;
27
28
31 @SdkInternalApi
32 public class GetObjectInterceptor implements ExecutionInterceptor {
33 @Override
34 public SdkResponse modifyResponse(Context.ModifyResponse context, ExecutionAttributes executionAttributes) {
35 SdkResponse response = context.response();
36 if (!(response instanceof GetObjectResponse)) {
37 return response;
38 }
39
40 return fixContentRange(response, context.httpResponse());
41 }
42
43
47 private SdkResponse fixContentRange(SdkResponse sdkResponse, SdkHttpResponse httpResponse) {
48
49 GetObjectResponse getObjectResponse = (GetObjectResponse) sdkResponse;
50 if (getObjectResponse.contentRange() != null) {
51 return getObjectResponse;
52 }
53
54
55 Optional<String> xAmzContentRange = httpResponse.firstMatchingHeader("x-amz-content-range");
56 if (!xAmzContentRange.isPresent()) {
57 return getObjectResponse;
58 }
59
60 return getObjectResponse.copy(r -> r.contentRange(xAmzContentRange.get()));
61 }
62 }
63