我试图为我的应用程序中的文件创建一个临时URL。我可以将文件上传到S3存储桶,并使用如下方法
当我点击此URL时,出现以下错误:
\Storage::temporaryUrl($this->url, now()->addHour(1))
生成以下URL。https://xxxxxx.s3.eu-west-2.amazonaws.com/https%3A//xxxxxxx.s3.eu-west-2.amazonaws.com/images/fYr20cgYh3nAwoEEQCOTaVTLLo7nRFrXjp7cYcCz.jpg?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAVHH6TLEV3Z2FBWLY%2F20210622%2Feu-west-2%2Fs3%2Faws4_request&X-Amz-Date=20210622T191649Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature=6300aa81e69c6f4c96cb6f319a2b5ed2bfc2b2767138994928a49f3f93906745
当我点击此URL时,出现以下错误:
The specified key does not exist.
根据此问题https://dev59.com/wF4b5IYBdhLWcg3wzUja#28654035,我已经检查了以下内容:
- 文件名存在于我的存储桶中,并且是从存储桶中的
Object URL
复制粘贴而来的。 - 尝试移除文件扩展名以查看其是否影响URL,但没有成功。文件名为
xxxx.jpg
与xxxxx
时一样
我是AWS新手,因此我将复制并粘贴我认为可能有助于解决问题的重要信息。
创建的IAM
用户具有以下权限:
- AmazonS3FullAccess
对于该帐户,存储桶Block Public Access settings for this account
被全部阻止:
我的存储桶公共访问权限也全部启用:
我目前作为根用户登录(因此我假定我可以做任何我想做的事情,因为我是根用户)
如果我将所有存储桶都设为公共访问,我就能够使用temporaryUrl
方法生成的URL提取文件。
最终目标
该存储桶的目标是用于存储应用程序用户上传的文件。我不想使所有文件都公开,因此我想限制用户访问他们所拥有的文件,因此我使用临时URL创建了它们。
Storage::disk('s3')->temporaryUrl($url, now()->addMinutes(30));
因为我对将文件存储在S3中还比较陌生,所以我的逻辑可能有误。如果这不是正确的做法,请纠正我。