【问题标题】:AWS S3 - Get object results in 404 NoSuchKeyAWS S3 - 在 404 NoSuchKey 中获取对象结果
【发布时间】:2018-08-07 22:37:48
【问题描述】:

我正在使用 AWS 开发工具包将图像放入我的 S3 实例。我可以通过以下方式成功地做到这一点:

AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider());

s3client.putObject(new PutObjectRequest(bucketName, key, file));

如果我在控制台页面浏览 S3 系统,我也可以看到上传的文件。但是,当我尝试通过 SDK 检索相同的文件时,我收到 404 "NoSuchKey" 错误:

AmazonS3 s3client = new AmazonS3Client(new ProfileCredentialsProvider());

S3Object result = s3client.getObject(new GetObjectRequest(bucketName, key));

这是确切的错误:

com.amazonaws.services.s3.model.AmazonS3Exception:指定的键不存在。 (服务:Amazon S3;状态代码:404;错误代码:NoSuchKey;

有人知道为什么吗?

【问题讨论】:

  • 你在 getObject() 中使用的键名是什么?

标签: java amazon-s3 aws-sdk


【解决方案1】:

同样的事情发生在我身上。文件名没有错误,并且文件存在于存储桶下的正确文件夹中。问题是我在形成密钥的路径之前提供了“/”。就像文件夹结构是存储桶下的下载/模板一样,我已将键指定为“/downloads/template”。通过将其更改为“下载/模板”得到解决

【讨论】:

    【解决方案2】:

    确保您的密钥名称不包含任何将被 URL 解码的特殊字符。一种常见的情况是,如果您的密钥名称包含“+”,当您使用 S3ObjectSummary 类的 getKey() API 检索密钥名称时,它将被解码为空白空间。

    可能需要特殊处理的字符

    以下 键名中的字符可能需要额外的代码处理,并且会 可能需要进行 URL 编码或引用为 HEX。其中一些是 不可打印的字符,您的浏览器可能无法处理它们,这 也需要特殊处理:

    和号(“&”)

    美元(“$”)

    ASCII 字符范围 00–1F 十六进制(0–31 十进制)和 7F(127 十进制)

    'At' 符号(“@”)

    等于 ("=")

    分号(“;”)

    冒号(“:”)

    加号(“+”)

    空格 - 在某些用途中可能会丢失重要的空格序列 (尤其是多个空格)

    逗号 (",")

    问号(“?”)

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

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 2020-01-18
      • 1970-01-01
      • 2017-10-24
      • 1970-01-01
      • 1970-01-01
      • 2017-06-27
      • 2015-12-21
      • 1970-01-01
      相关资源
      最近更新 更多