使用S3 Mock时abortMultiPart接口调用返回404问题求助
S3取消未完成分块上传返回404的排查原因
你初始化分块上传的代码如下:
CreateMultipartUploadRequest request = CreateMultipartUploadRequest.builder() .bucket(bucket).key(destinationUrl).build(); CreateMultipartUploadResponse multipart = s3Client.createMultipartUpload(request); return multipart.uploadId();
传入相同的bucket、key和uploadId调用取消接口却返回404,可能的原因包括:
- Bucket/Key大小写不匹配:S3的Bucket名称在多数区域区分大小写,Key也严格区分大小写。如果取消请求中的bucket或key与初始化时的大小写不一致(比如初始化用
MyBucket,取消时写成mybucket),会直接找不到对应的上传会话。 - UploadId传递错误:检查
uploadId是否完整传递,有没有被截断、转义或存储时被修改。哪怕是一个字符的差异,都会导致请求找不到目标会话。 - 上传会话已自动过期:S3默认会在7天后清理未完成的分块上传,如果间隔时间过长,目标会话已经被系统自动删除,此时请求会返回404。
- 隐性权限问题:部分场景下,权限不足时S3不会返回403而是404。确认执行取消操作的身份(IAM用户/角色)是否拥有
s3:AbortMultipartUpload权限,同时检查Bucket策略是否允许该操作。 - 客户端区域/Endpoint不匹配:初始化上传和取消上传使用的S3客户端是否配置了相同的区域和Endpoint?如果客户端指向的区域不同,相当于访问不同的存储节点,自然找不到对应的上传会话。
- Key的特殊字符编码问题:如果
destinationUrl包含空格、特殊符号,初始化时客户端可能自动做了URL编码,但取消请求时没有使用编码后的Key,导致Key不匹配。
内容的提问来源于stack exchange,提问作者JoseCarlosPB
相关产品推荐
相关产品推荐

