gpt4 book ai didi

java - 部分成功完成后,S3 分段上传失败

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:23:28 24 4
gpt4 key购买 nike

我正在尝试将动态生成的数据从内存上传到 S3。

这是实际上传零件的代码:

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 );

在发送完成整个分段上传的请求后,我在日志中得到以下信息:

REQUEST_CONTENT_LENGTH_EVENT
CLIENT_REQUEST_STARTED_EVENT
HTTP_REQUEST_STARTED_EVENT
HTTP_REQUEST_COMPLETED_EVENT
CLIENT_REQUEST_FAILED_EVENT

然后线程卡在那里。

我假设 CLIENT_REQUEST_FAILED_EVENT 表示整个上传失败。我错过了什么?

我尝试增加部分大小,以便整个多部分上传只有一个上传部分并且成功了。如果总零件数大于 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。

https://docs.aws.amazon.com/AmazonS3/latest/dev/qfacts.html

我已经多次访问该页面,但我忽略了它。真的很容易被忽视。日志也没有帮助。

关于java - 部分成功完成后,S3 分段上传失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49102672/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com