Java 成功完成部件后,S3多部件上传在完成时失败
我正在尝试将动态生成的数据从内存上传到S3 以下是实际上传部件的代码:Java 成功完成部件后,S3多部件上传在完成时失败,java,amazon-s3,Java,Amazon S3,我正在尝试将动态生成的数据从内存上传到S3 以下是实际上传部件的代码: UploadPartRequest partReq = new UploadPartRequest() .withBucketName( this.getBucket() ) .withKey( this.getKey() ) .withUploadId( uploadId ) .withPartNumber( partNumber ) .withPartSize( partSize
UploadPartRequest partReq = new UploadPartRequest()
.withBucketName( this.getBucket() )
.withKey( this.getKey() )
.withUploadId( uploadId )
.withPartNumber( partNumber )
.withPartSize( partSize )
.withInputStream( is )
.withGeneralProgressListener( (ProgressEvent e) -> {
log.info( "{} {} {} {} {} {} bytes transferred",
this.getBucket(), this.getKey(), uploadId, partNumber,
e.getEventType(), e.getBytesTransferred() );
});
UploadPartResult partRes = this.getClient().uploadPart( partReq );
在上传完所有部分后,我的日志中会出现以下行,我认为这意味着所有上传部分都已成功上传
1 TRANSFER_PART_COMPLETED_EVENT
2 TRANSFER_PART_COMPLETED_EVENT
3 TRANSFER_PART_COMPLETED_EVENT
4 TRANSFER_PART_COMPLETED_EVENT
5 TRANSFER_PART_COMPLETED_EVENT
6 TRANSFER_PART_COMPLETED_EVENT
7 TRANSFER_PART_COMPLETED_EVENT
8 TRANSFER_PART_COMPLETED_EVENT
9 TRANSFER_PART_COMPLETED_EVENT
10 TRANSFER_PART_COMPLETED_EVENT
11 TRANSFER_PART_COMPLETED_EVENT
12 TRANSFER_PART_COMPLETED_EVENT
13 TRANSFER_PART_COMPLETED_EVENT
14 TRANSFER_PART_COMPLETED_EVENT
15 TRANSFER_PART_COMPLETED_EVENT
17 TRANSFER_PART_COMPLETED_EVENT
16 TRANSFER_PART_COMPLETED_EVENT
当上传部分还在上传的时候,下面这一行也出现了很多次,这告诉我它确实在为那些上传发送数据
REQUEST_BYTE_TRANSFER_EVENT 8192 bytes transferred
这是我用来完成整个上传过程的代码
CompleteMultipartUploadRequest cmpur = new CompleteMultipartUploadRequest()
.withBucketName( this.getBucket() )
.withKey( this.getKey() )
.withUploadId( result.getUploadId() )
.withPartETags( new ArrayList<>( this.getUploadPartResults() ) )
.withGeneralProgressListener((e) -> {
log.info( "{} {} {} {} bytes transferred",
this.getBucket(), this.getKey(),
e.getEventType(), e.getBytesTransferred() );
});
this.getClient().completeMultipartUpload( cmpur );
然后线就挂在那里了
我假设客户端请求失败事件意味着整个上传失败。我错过了什么
我尝试增加部分大小,以便在整个多部分上传中只有一个上传的部分,这是成功的。如果总零件数大于1,则失败
以下是当它只有一个部分时成功上传的日志
REQUEST_CONTENT_LENGTH_EVENT 0 bytes transferred
CLIENT_REQUEST_STARTED_EVENT 0 bytes transferred
HTTP_REQUEST_STARTED_EVENT 0 bytes transferred
HTTP_REQUEST_COMPLETED_EVENT 0 bytes transferred
RESPONSE_CONTENT_LENGTH_EVENT 0 bytes transferred
HTTP_RESPONSE_STARTED_EVENT 0 bytes transferred
RESPONSE_BYTE_TRANSFER_EVENT 309 bytes transferred
HTTP_RESPONSE_COMPLETED_EVENT 0 bytes transferred
CLIENT_REQUEST_SUCCESS_EVENT 0 bytes transferred
REQUEST_BYTE_TRANSFER_EVENT 135 bytes transferred
也许,我还可以在日志中添加什么内容来查看出了什么问题?我发现这是因为我的部件实际上小于所需的最小大小(5MB) 我已经读了好几遍了,但还是忽略了它。这很容易被忽视。日志也没用
REQUEST_CONTENT_LENGTH_EVENT 0 bytes transferred
CLIENT_REQUEST_STARTED_EVENT 0 bytes transferred
HTTP_REQUEST_STARTED_EVENT 0 bytes transferred
HTTP_REQUEST_COMPLETED_EVENT 0 bytes transferred
RESPONSE_CONTENT_LENGTH_EVENT 0 bytes transferred
HTTP_RESPONSE_STARTED_EVENT 0 bytes transferred
RESPONSE_BYTE_TRANSFER_EVENT 309 bytes transferred
HTTP_RESPONSE_COMPLETED_EVENT 0 bytes transferred
CLIENT_REQUEST_SUCCESS_EVENT 0 bytes transferred
REQUEST_BYTE_TRANSFER_EVENT 135 bytes transferred