laravel - 指定的键不存在 - Laravel

标签 laravel amazon-web-services amazon-s3

我正在尝试为我的应用程序中的文件创建一个临时 URL。我能够将文件上传到 S3 存储桶,并且能够使用方法 \Storage::temporaryUrl($this->url, now()->addHour(1)) 生成以下网址

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://stackoverflow.com/a/28654035/4581336我检查了以下内容:

  • 文件名存在于我的存储桶中,它是我存储桶中 Object URL 下文件的复制粘贴
  • 我尝试从文件中删除扩展名以查看它是否影响 URL,但也没有成功。 xxxx.jpgxxxxx 作为文件名是一样的

file name from my bucket

我是 AWS 世界的新人,所以我会复制粘贴我认为可能对帮助解决问题很重要的东西。

创建的 IAM 用户具有以下权限:

  • AmazonS3FullAccess

Block Public Access settings for this account 已阻止所有内容:

Block Public Access settings for this account

我的存储桶公共(public)权限也启用了所有内容:

my bucket permissions

我目前以 root 用户身份登录(因此我假设我是 root 用户,所以我可以做任何我想做的事)

如果我将所有存储桶公开,我就可以使用 temporaryUrl 方法生成的提取 URL 访问文件

最终目标

存储桶的目的是在我的应用程序中有一个地方存储用户上传的文件。我不想公开所有文件,所以我想限制用户访问他们拥有的文件,所以我创建了一个临时 URL

Storage::disk('s3')->temporaryUrl($url, now()->addMinutes(30));

由于我对在 S3 中存储文件还很陌生,所以我的逻辑可能存在缺陷。如果这不是应该的方式,请纠正我。

我看过但没有帮助我的问题

最佳答案

在您的第一个 URL 中,主机名似乎出现了两次 - https://xxxxxx.s3.eu-west-2.amazonaws.com 出现了一次,然后是第二次编码。您是否将完整的主机名存储在 $url 参数到 temporaryUrl 中?您应该只将 key (实际文件名)传递给该方法。

该错误听起来不像是权限错误 - 它看起来好像您可以访问存储桶,但只是没有获得正确的文件路径。

关于laravel - 指定的键不存在 - Laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68089708/

相关文章:

jquery - Laravel,jQuery 文件上传错误 - "Call to a member function store() on array"

mysql - 创建没有 mysql 表的自定义类型

css - 有没有办法在 laravel 中随机化 css 类

python - botocore s3 put 由于编码而出现哈希文件问题?

amazon-web-services - 如何估算递归 `aws s3 ls` 成本?

laravel - 如何为belongsTo 创建Laravel 资源关系?

amazon-web-services - awsvpc : Network Configuration is not valid for the given networkMode of this task definition

amazon-web-services - 弹性 beantalk 未记录的 venv 路径

python - 尝试发回消息时,Teams Bot 抛出未经授权的错误

node.js - 应考虑使用 Node js 可伸缩性和性能将文件上传到 s3 的良好做法