AWS S3 - 在404 NoSuchKey中获取对象结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AWS S3 - 在404 NoSuchKey中获取对象结果相关的知识,希望对你有一定的参考价值。

我正在使用AWS SDK将图像放入我的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;

谁知道为什么?

答案

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

可能需要特殊处理的字符

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

&符号(“&”)

美元(“$”)

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

'at'符号(“@”)

等于(“=”)

分号(“;”)

冒号(“:”)

加(“+”)

空间 - 在某些用途(特别是多个空间)中可能会丢失重要的空间序列

段落(“,”)

问号(“?”)

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

以上是关于AWS S3 - 在404 NoSuchKey中获取对象结果的主要内容,如果未能解决你的问题,请参考以下文章

页面刷新时出现Amazon AWS S3 404错误

AWS CLI S3:使用终端在本地复制文件:致命错误:调用 HeadObject 操作时发生错误(404)

AWS BOTO3 S3 python - 调用 HeadObject 操作时发生错误(404):未找到

刷新页面导致 404 错误-AWS-Angular 6

无法从 Amazon S3 下载具有特殊字符的文件

AWS lambda:调用HeadObject操作时发生错误(404):找不到