当用户尝试访问我的 Amazon Simple Storage Service (Amazon S3) 存储桶中的对象时,他们收到 404 NoSuchKey 错误。
解决方法
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
如果存储桶中缺少请求的对象,Amazon S3 可能会返回 404 错误。在用户对某个对象发出 GET 或 HEAD 请求之前,请检查该对象是否存在于 S3 目录存储桶或通用存储桶中。
**注意:**本文中描述的解决方案仅适用于 Amazon S3 目录存储桶和通用存储桶。
要检查存储桶中是否存在某个对象,请从 Amazon S3 控制台查看存储桶中的内容。或者,您可以使用 AWS 命令行界面 (AWS CLI) 运行 head-object 命令:
aws s3api head-object --bucket awsexamplebucket --key object.jpg
注意: 请将 awsexamplebucket 替换为您的存储桶名称,并将 object.jpg 替换为您的对象名称。
Amazon S3 为所有应用程序提供强大的写后读一致性。在对某个对象执行写入、覆盖或删除操作后,任何读取请求都能立即获取该对象的最新版本。Amazon S3 还为列表操作提供强一致性。在写入后,您可以列出存储桶中的对象。有关 Amazon S3 一致性的详细信息,请参阅 Amazon S3 强一致性。
如果 S3 存储桶中存在请求的对象,但您再次收到 "404 NoSuchKey" 错误,请检查以下内容:
-
确认请求与对象名称完全匹配。对 S3 对象的请求区分大小写。例如,如果对象名为 myimage.jpg,但发出的请求为 Myimage.jpg,则请求者会收到 "404 NoSuchKey" 错误。
-
确认请求的路径与对象的路径匹配。否则,请求者将收到 "404 NoSuchKey" 错误。
-
如果对象的路径包含任何空格,请检查请求是否使用了正确的语法来识别该路径。例如,如果您使用 AWS CLI 将对象下载到 Windows 计算机,则必须在对象路径前后使用引号。对象路径必须与以下示例类似:
aws s3 cp "s3://awsexamplebucket/Backup Copy Job 4/3T000000.vbk"
注意: 请将对象路径替换为您的对象路径。
-
检查对象名称中是否存在任何难以看到的特殊字符或 URL 编码字符,例如回车符 (\r) 或换行符 (\n)。例如,末尾带有回车符的对象名称 test 在 Amazon S3 控制台中显示为 test%0A。要检查对象名称中是否存在特殊字符,请运行包含参数 --output json 的 list-objects-v2 命令。JSON 输出可使回车符 (\r) 等字符显示。如果对象名称的特殊字符并不显示,请从对象名称中移除该字符。再次尝试访问该对象。
-
(可选)您可以打开服务器访问日志记录更详细地查看请求记录,以了解可能导致 "404 NoSuchKey" 错误的问题。
**注意:**如果通用存储桶中缺少某个对象且请求者没有 s3:ListBucket 访问权限,则请求者会收到 "403 Access Denied" 错误。如果您收到 "403 Access Denied" 错误,请解决与缺少对象相关的问题。
相关信息
排查 Amazon S3 中的 Access Denied (403 Forbidden) 错误