【发布时间】:2020-03-30 15:04:50
【问题描述】:
我正在使用 AWS v2 java SDK。 我正在尝试将对象上传到我的存储桶。我希望该对象是公开可读的。
我所做的如下:
PresignedPutObjectRequest presignedRequest =S3Presigner.create()
.presignPutObject(z -> z.signatureDuration(Duration.ofMinutes(10))
.putObjectRequest(
por -> por.bucket("MYBUCKET")
.key("MYOBJECTKEY")
.acl(ObjectCannedACL.PUBLIC_READ)));
URL url = presignedRequest.url();
然后我使用此 URL 上传文件。执行此操作时收到 403 响应。
如果我删除添加 acl 的行,那么上传就可以了。
如果我将 ACL 更改为 PRIVATE,也会失败。
从我的 aws 控制台,我可以公开一个对象,所以我不认为这是一个存储桶策略问题。
如何解决这个问题?我想将对象上传到存储桶并使其公开可读
经过我的更多调试后,URL 的构建方式似乎存在问题。
这是我不添加 ACL 时 URL 的一部分
&X-Amz-SignedHeaders=host&X-Amz-Expires=120
这是带有 ACL 的 URL 的相似部分
&X-Amz-SignedHeaders=host%3Bx-amz-acl&X-Amz-Expires=120
URL 构建看起来很糟糕
【问题讨论】:
标签: java amazon-web-services amazon-s3