[英]S3Exception when trying to complete multi-part upload using the AWS Java v2 SDK
我正在尝试使用 AWS SDK for Java v2 在 Java 11 中完成到 S3 的多部分上传。
我的CompleteMultipartUploadRequest
最初看起来像这样,并且功能正常:
CompleteMultipartUploadRequest completeMultipartUploadRequest = CompleteMultipartUploadRequest
.builder()
.bucket(s3BucketName)
.key(fileName)
.uploadId(uploadId)
.multipartUpload(CompletedMultipartUpload.builder().parts(completedParts).build())
.build();
CompleteMultipartUploadResponse completedUploadResponse = s3Client.completeMultipartUpload(completeMultipartUploadRequest);
return completedUploadResponse.location();
但是,Sonar 抱怨:
考虑使用 Consumer Builder 方法而不是创建此嵌套构建器。
所以我对请求做了一个小改动:
CompleteMultipartUploadRequest completeMultipartUploadRequest = CompleteMultipartUploadRequest
.builder()
.bucket(s3BucketName)
.key(fileName)
.uploadId(uploadId)
.multipartUpload(completedParts -> CompletedMultipartUpload.builder().parts(completedParts).build())
.build();
CompleteMultipartUploadResponse completedUploadResponse = s3Client.completeMultipartUpload(completeMultipartUploadRequest);
return completedUploadResponse.location();
声纳警告消失了,但随后上传开始抛出以下异常:
线程“主”software.amazon.awssdk.services.s3.model.S3Exception 中的异常:您提供的 XML 格式不正确或未根据我们发布的架构进行验证(服务:S3,状态代码:400,请求 ID: xxx,扩展请求 ID:xxx)在 software.amazon.awssdk.protocols.xml.internal.unmarshall.AwsXmlPredicatedResponseHandler.handleErrorResponse(AwsXmlPredicatedResponseHandler.java:156)
有什么问题?
您在此处使用的消费者方法具有multipartUpload(Consumer<CompletedMultipartUpload.Builder> multipartUpload)
的签名。
在您更新的代码中,您正在传递一个函数,该函数将CompletedPart
对象列表作为输入并返回CompletedMultipartUpload
对象。
这与签名不匹配,因为您没有传入只接收构建器的消费者。
更新您的代码以简单地在提供的构建器对象上设置部件——您不需要自己构建它。
该方法的文档也说明了这一点:
这是一种创建
CompletedMultipartUpload.Builder
实例的便利,避免了通过CompletedMultipartUpload.builder()
手动创建实例的需要。
试试这个:
CompleteMultipartUploadRequest completeMultipartUploadRequest = CompleteMultipartUploadRequest.builder()
.bucket(bucketName)
.key(keyName)
.uploadId(uploadId)
.multipartUpload(completedMultipartUpload -> completedMultipartUpload.parts(completedParts))
.build();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.