Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 传输管理器上的Amazon SDK自定义头问题_Java_Amazon S3_Aws Sdk_Awss3transfermanager_Aws Sdk Java 2.0 - Fatal编程技术网

Java 传输管理器上的Amazon SDK自定义头问题

Java 传输管理器上的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

我们正在尝试使用TransferManager从AmazonS3下载文件。但TransferManager在doDownload函数中多次使用getObjectMetadata服务。通过从我提供的初始请求复制普通成员来调用创建请求的服务

问题是我添加了一些自定义头,包括授权头。getObjectMetadata需要这个头。所以我必须修改一些sdk类

AmazonS3Client.java

受保护的请求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;
}