当前位置: 首页 > 知识库问答 >
问题:

指定的密钥不存在-Laravel

晏富
2023-03-14

我试图在我的应用程序中创建一个文件的临时URL。我能够上传文件到S3桶,我能够使用方法\Storage::临时Url($this-

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.jpgvsxxxxx作为文件名是相同的

我在AWS的世界里是一个相当新的人,所以我会复制粘贴一些我认为可能对解决这个问题很重要的东西。

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

  • 亚马逊全访问

此帐户的bucket阻止公共访问设置已阻止所有内容:

我的桶公共权限也启用了一切:

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

如果我把所有的桶都公开,我就可以使用由临时Url方法生成的提取的URL访问文件

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

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

因为我对在S3中存储文件相当陌生,所以我的逻辑可能有缺陷。如果事情不是这样的,请纠正我。

  • Amazon S3异常:“指定的密钥不存在”
  • CloudFront S3网站:应显示隐式索引文档时:“指定的键不存在”
  • aws sdk:NoSuchKey:指定的密钥不存在
  • NoSuchKey:指定的密钥不存在AWS S3 Codebuild
  • AWS::S3::NoSuchKey指定的密钥不存在

共有1个答案

邹正阳
2023-03-14

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

这个错误听起来不像是权限错误——它看起来好像你有权访问bucket,但只是没有获得正确的文件路径。

 类似资料:
  • 我正在使用AWS amplify创建GraphQLAPI。我运行了命令并创建了模式。graphql,但当我运行时,我得到以下错误: 获取到后端环境的更新:从云开发。(节点: 21276)UnhandledPromiseRejessWarning: NoSuchKey:指定的密钥不存在。 我怎样才能解决这个问题?

  • 我有一个Symfony 3.3联系人表单,可以发送电子邮件,并且我希望允许选择性地上传一些附件。 我正在努力适应https://symfony.com/doc/3.3/form/form_collections.html 满足我的需要。 我的formBuilder的相关部分如下所示: ...我刚刚修改了我的树枝模板,看起来像这样... ... 此时,加载“我的页面”会产生以下消息: 带键阵列的键“

  • 我想创建或获取证书,创建pfx文件,加载它并让IdentityServer使用它。但是,IdentityServer无法使用我的pfx。 如何成功创建pfx并让IdentityServer使用它? 我有一个IdentityServer4 web解决方案,它使用ASP在本地主机上运行。净核心。我正在为在Azure上运行的生产准备解决方案,并将证书添加到IdentityServer管道,而不是开发者签

  • 我试图在我的一个项目中使用Google Maps API,并在指导中设置API凭据,它希望我将应用程序的SHA-1签名证书指纹添加到API中。 在说明中,它说使用下面的命令来获取指纹: 当我尝试使用它时,无论是在Android Studio终端还是在我的应用程序目录中的cmd提示符,我都得到以下错误: 注意,我的应用程序在D:\Projects\Android\AppName中。 我如何获得我的S

  • 将私钥加密变换为keystore v3标准格式。 调用: web3.eth.accounts.encrypt(privateKey, password); 参数: privateKey - String: 要加密的私钥. password - String: 用于加密的密码 返回值: Object: 加密后的keystore v3 JSON. 示例代码: web3.eth.accounts.en

  • 问题内容: 我无法在上创建索引。 MySQL: 问题答案: