You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Amazon S3 getObject接口抛出The specified key does not exist错误如何解决

Amazon S3 NoSuchKeyException 404 问题解决方案

该异常本质是S3服务端判定你指定的桶内不存在请求的Key对应的对象,可按以下步骤排查解决:

问题代码片段:

GetObjectRequest getObjectRequest =
GetObjectRequest.builder().bucket(bucketName).key(objectName).build();
ResponseInputStream responese = this.s3Client.getObject(getObjectRequest);
  • 首先匹配业务逻辑:你描述的需求是上传对象到S3,但上述代码是S3对象下载的接口调用。如果是要执行上传操作,请替换为PutObject相关逻辑,示例:
// 上传本地文件示例
PutObjectRequest putObjectRequest = PutObjectRequest.builder()
    .bucket(bucketName)
    .key(objectName)
    .build();
s3Client.putObject(putObjectRequest, Paths.get("你本地要上传的文件路径"));

// 上传流示例
PutObjectRequest putObjectRequest = PutObjectRequest.builder()
    .bucket(bucketName)
    .key(objectName)
    .build();
s3Client.putObject(putObjectRequest, RequestBody.fromInputStream(你的输入流, 流长度));
  • 如果确实是要执行下载操作,按以下步骤排查:
    • 校验bucketName是否正确,且S3客户端配置的区域和桶实际所属区域完全一致,跨区域访问可能触发404错误
    • 校验objectName(即S3对象Key):S3的Key是大小写敏感的,且完全匹配前后缀,检查是否有多余的斜杠、空格、未转义的特殊字符,不要携带本地文件系统的相对路径前缀(比如./、../等)
    • 检查账号权限:当前S3客户端使用的凭证必须有s3:GetObject权限,部分场景下S3为了避免泄露桶内对象存在性,会对无权限的请求返回404而非403
    • 如果桶开启了版本控制,检查目标对象是否被添加了删除标记,带删除标记的对象调用普通getObject会返回404,需要指定对应版本号才能访问
    • 如果是刚上传完对象就立刻调用下载接口,S3存在最终一致性延迟,可增加1~2秒的延迟重试逻辑

内容的提问来源于stack exchange,提问作者parita porwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 23:39:03