我正在尝试使用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();
然而,声纳抱怨说:
请考虑使用使用者生成器方法,而不是创建此嵌套生成器。
所以我对请求做了一个小小的改动:
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();
声纳警告消失了,但随后上传开始抛出以下异常:
线程"主"软件中出现异常。您提供的XML格式不正确,或者未针对我们发布的架构进行验证(服务:S3,状态代码:400,请求编号:xxx,扩展请求ID:xxx)在软件。亚马逊。awssdk。协议。xml。内部。unmarshall。awsxml预测响应处理程序。处理错误响应(awsxml预测响应处理程序。java:156)
有什么问题吗?
1条答案
按热度按时间ercv8c1e1#
您在这里使用的消费者方法具有
multipartUpload(Consumer<CompletedMultipartUpload.Builder> multipartUpload)
的signature。在更新后的代码中,您传递了一个函数,该函数接受
CompletedPart
对象列表作为输入,并返回一个CompletedMultipartUpload
对象。这与签名不匹配,因为您没有传入只接收构建器的消费者。
更新您的代码,只需在提供的构建器对象上设置部件-您不需要自己构建它。
该方法的文件也对此进行了说明:
这是创建
CompletedMultipartUpload.Builder
* 示例的一种便利,从而避免了通过CompletedMultipartUpload.builder()
手动 * 创建示例的需要。试试这个: