Java 传输管理器上的Amazon SDK自定义头问题
我们正在尝试使用TransferManager从AmazonS3下载文件。但TransferManager在doDownload函数中多次使用getObjectMetadata服务。通过从我提供的初始请求复制普通成员来调用创建请求的服务 问题是我添加了一些自定义头,包括授权头。getObjectMetadata需要这个头。所以我必须修改一些sdk类 AmazonS3Client.javaJava 传输管理器上的Amazon SDK自定义头问题,java,amazon-s3,aws-sdk,awss3transfermanager,aws-sdk-java-2.0,Java,Amazon S3,Aws Sdk,Awss3transfermanager,Aws Sdk Java 2.0,我们正在尝试使用TransferManager从AmazonS3下载文件。但TransferManager在doDownload函数中多次使用getObjectMetadata服务。通过从我提供的初始请求复制普通成员来调用创建请求的服务 问题是我添加了一些自定义头,包括授权头。getObjectMetadata需要这个头。所以我必须修改一些sdk类 AmazonS3Client.java 受保护的请求createRequest(字符串bucketName、字符串键、X originalReque
受保护的请求createRequest(字符串bucketName、字符串键、X originalRequest、HttpMethodName httpMethod、URI端点){
//如果基础AmazonS3Client已启用加速模式,则
//请求操作支持加速模式,则请求将使用
//s3加速端点以执行操作。
if(clientOptions.isAccelerateModeEnabled()&&!(S3AccelerateUnsupported的原始请求实例)){
if(clientOptions.isDualstackEnabled()){
endpoint=RuntimeHttpUtils.toUri(Constants.S3\u ACCELERATE\u DUALSTACK\u主机名,clientConfiguration);
}否则{
endpoint=RuntimeHttpUtils.toUri(Constants.S3\u ACCELERATE\u主机名,clientConfiguration);
}
}
请求=新的DefaultRequest(原始请求,常量.S3\u服务\u显示\u名称);
请求.setHttpMethod(httpMethod);
request.addHandlerContext(S3HandlerContextKeys.IS_CHUNKED_ENCODING_DISABLED,
Boolean.valueOf(clientOptions.isChunkedEncodingDisabled());
request.addHandlerContext(S3HandlerContextKeys.IS\u PAYLOAD\u SIGNING\u已启用,
Boolean.valueOf(clientOptions.isPayloadSigningEnabled());
//我的代码从这里开始
if(originalRequest.getCustomRequestHeaders()!=null){
Set keys=originalRequest.getCustomRequestHeaders().keySet();
for(Iterator Iterator=keys.Iterator();Iterator.hasNext();){
String headerKey=iterator.next();
request.addHeader(headerKey,originalRequest.getCustomRequestHeaders().get(headerKey));
}
}
//我的代码到此结束
resolveRequestEndpoint(请求、bucketName、密钥、端点);
addHandlerContext(HandlerContextKey.SIGNING_REGION,getSigningRegion());
返回请求;
}
RequestCopyUtils.java
公共静态GetObjectMetadataRequest createGetObjectMetadataRequestFrom(GetObjectRequest GetObjectRequest){
GetObjectMetadataRequest GetObjectMetadataRequest=新的GetObjectMetadataRequest(getObjectRequest.getBucketName(),getObjectRequest.getKey())
.withVersionId(getObjectRequest.getVersionId())
.withRequesterPays(getObjectRequest.isRequesterPays())
.WisseCustomerKey(getObjectRequest.getSSECustomerKey())
.withPartNumber(getObjectRequest.getPartNumber());
Set keys=getObjectRequest.getCustomRequestHeaders().keySet();
for(Iterator Iterator=keys.Iterator();Iterator.hasNext();){
String key=iterator.next();
getObjectMetadataRequest.putCustomRequestHeader(键,getObjectRequest.getCustomRequestHeaders().get(键));
}
返回getObjectMetadataRequest;
}
对我来说,这似乎是一个错误。但是有什么合适的解决办法吗
问候
protected <X extends AmazonWebServiceRequest> Request<X> createRequest(String bucketName, String key, X originalRequest, HttpMethodName httpMethod, URI endpoint) {
// If the underlying AmazonS3Client has enabled accelerate mode and the original
// request operation is accelerate mode supported, then the request will use the
// s3-accelerate endpoint to performe the operations.
if (clientOptions.isAccelerateModeEnabled() && !(originalRequest instanceof S3AccelerateUnsupported)) {
if (clientOptions.isDualstackEnabled()) {
endpoint = RuntimeHttpUtils.toUri(Constants.S3_ACCELERATE_DUALSTACK_HOSTNAME, clientConfiguration);
} else {
endpoint = RuntimeHttpUtils.toUri(Constants.S3_ACCELERATE_HOSTNAME, clientConfiguration);
}
}
Request<X> request = new DefaultRequest<X>(originalRequest, Constants.S3_SERVICE_DISPLAY_NAME);
request.setHttpMethod(httpMethod);
request.addHandlerContext(S3HandlerContextKeys.IS_CHUNKED_ENCODING_DISABLED,
Boolean.valueOf(clientOptions.isChunkedEncodingDisabled()));
request.addHandlerContext(S3HandlerContextKeys.IS_PAYLOAD_SIGNING_ENABLED,
Boolean.valueOf(clientOptions.isPayloadSigningEnabled()));
//my code starts here
if ( originalRequest.getCustomRequestHeaders() != null ) {
Set<String> keys = originalRequest.getCustomRequestHeaders().keySet();
for (Iterator<String> iterator = keys.iterator(); iterator.hasNext();) {
String headerKey = iterator.next();
request.addHeader(headerKey, originalRequest.getCustomRequestHeaders().get(headerKey));
}
}
//my code ends here
resolveRequestEndpoint(request, bucketName, key, endpoint);
request.addHandlerContext(HandlerContextKey.SIGNING_REGION, getSigningRegion());
return request;
}
public static GetObjectMetadataRequest createGetObjectMetadataRequestFrom(GetObjectRequest getObjectRequest) {
GetObjectMetadataRequest getObjectMetadataRequest = new GetObjectMetadataRequest(getObjectRequest.getBucketName(), getObjectRequest.getKey())
.withVersionId(getObjectRequest.getVersionId())
.withRequesterPays(getObjectRequest.isRequesterPays())
.withSSECustomerKey(getObjectRequest.getSSECustomerKey())
.withPartNumber(getObjectRequest.getPartNumber());
Set<String> keys = getObjectRequest.getCustomRequestHeaders().keySet();
for (Iterator<String> iterator = keys.iterator(); iterator.hasNext();) {
String key = iterator.next();
getObjectMetadataRequest.putCustomRequestHeader(key, getObjectRequest.getCustomRequestHeaders().get(key));
}
return getObjectMetadataRequest;
}