我使用AWS服务来保存和检索文件。
我试图生成一个访问和读取文件/存储桶的URL。
我是这样做的:
GetPreSignedUrlRequest request = new GetPreSignedUrlRequest()
{
BucketName = fileDetails.BucketName,
Key = fileDetails.FileKey,
Expires = expires
};
result = client.GetPreSignedURL(request);
网址生成成功,但是当我尝试通过此网址访问该文件时,出现以下错误:
我想我应该授予此文件的公共权限。 有人知道我应该怎么做才能通过网址与公众许可共享文件?
AWS documentation中没有任何关于公开许可的提及。
答案 0 :(得分:1)
无论您正在设置expires
的值,都无法正常工作。
该链接已过期。
此错误消息应按面值解释。
文档未提及此事实(据我所知),但在身份验证或授权检查完成之前,验证了预签名URL的到期时间。对于因为过期而无效的链接的进一步验证没有意义。
检查查询字符串中的Expires=
或X-Amz-Expires=
值。
Expires
是相对于unix时期的到期时间,或X-Amz-Expires
是时间(以X-Amz-Date
为单位),直到链接到期为止。其中只有一个存在(Signature V2与V4差异)。
另请注意,一旦发现问题,您不能简单地修改URL中表示的过期时间以使值不同然后使用它 - 对签名URL的任何篡改都将使签名无效(通过设计)。
答案 1 :(得分:-1)
确保您在客户端上使用的凭据与附加了AmazonS3FullAccess策略的用户(或其所属的组)绑定。