如何解决 Amazon S3 的 404“NoSuchKey”错误?

上次更新日期:2021 年 1 月 5 日

我的用户尝试访问我的 Amazon Simple Storage Service (Amazon S3) 存储桶中的对象,但 Amazon S3 返回 404“NoSuchKey”错误。如何解决此错误?

解决方法

如果存储桶中请求的对象缺失,则 Amazon S3 通常会返回 404 错误。在用户对某个对象发出 GET 或 HEAD 请求之前,请确保该对象已创建并且在 S3 存储桶中存在。

您可以从 Amazon S3 控制台查看存储桶中的内容,以检查存储桶中的某个对象是否可用。或者,您可以使用 AWS 命令行界面 (AWS CLI) 运行 head-object 命令:

aws s3api head-object --bucket awsexamplebucket --key object.jpg

重要提示:如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新的 AWS CLI 版本

请注意,Amazon S3 为所有应用程序提供强大的写入后读取一致性。成功写入新对象或覆盖删除现有对象后,任何后续读取请求都会立即收到该对象的最新版本。S3 还为列表操作提供强大的一致性。写入后,您可以执行存储桶中对象的列表。有关 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 jsonlist-objects-v2 命令。JSON 输出使诸如回车 (\r) 之类的字符可见。如果对象名称具有不总是可见的特殊字符,请从对象名称中删除该字符。然后尝试再次访问该对象。
  • (可选)您可以启用服务器访问日志记录,以查看请求记录中可能会导致 404 NoSuchKey 错误的问题的详细信息。

注意:如果存储桶中的对象缺失并且请求者没有 s3:ListBucket 访问权限,则请求者会收到 403 访问被拒绝错误。如果您收到 403 访问被拒绝错误,请解决与缺失对象相关的问题。


这篇文章对您有帮助吗?


需要更多帮助?