【问题标题】:Amazon S3 Fetching Error: "NoSuchKey" However Key Does ExistAmazon S3 获取错误:“NoSuchKey”但是密钥确实存在
【发布时间】:2020-08-19 13:42:55
【问题描述】:

我正在尝试使用 AWS Storage 获取 S3 对象

fetchAvatar = async () => {
  try {
      const imageData = await Storage.get("public/public/us-east-2:/1597842961073/family.jpg")
      console.log(imageData)
  } catch (err) {
      console.log('error fetching avatar: ')
      console.log(err)
  }
}

当我单击 imageData 提供的链接时,我得到 NoSuchKey 错误,但它确实存在

我已确保该图像是公开的并且可供所有人访问,因此不应该存在任何身份验证问题。我也查看了与此类似的问题,并确保我的图像键中没有空格或很多特殊键。我有点难过...

【问题讨论】:

  • 另外,如果我进入 S3 管理控制台,然后单击图像,它确实存在并且可以手动下载..idk 如果这有帮助,但我希望它可以。

标签: javascript reactjs amazon-web-services amazon-s3


【解决方案1】:

所以我找到了原因,这与 AWS S3 管理有关。由于某种原因,每次我上传图像时,该文件夹都会重置并变成女贞。当我手动重新制作文件夹和图像时,我能够正确渲染图像......所以我想这是他们需要修复的更多 AWS 问题或错误

【讨论】:

  • 可以安全地假设问题不在 S3 内部,而是您的设置存在一些您不理解的地方。没有文件夹重置和私有化之类的东西,因为在 S3 中没有文件夹级权限之类的东西,除非在 IAM 策略中处理,您没有提及并且不会通过上传对象进行修改。在您的存储桶上启用日志记录,实际发生的事情应该从日志中显而易见。
  • 是的,所以我对 AWS 有点陌生,但我想通了,我只需要向存储桶添加一个新策略,因为它是自动私有的。它解决了它。
【解决方案2】:

我建议使用javascript aws sdk,你可以从桶中获取一个对象,如下所示:

 var params = {
    Bucket: "your-bucket-name", 
    Key: "yourFileName.jpg"
 };
 s3.getObject(params, function(err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else     console.log(data);  
 });

更新:

您可以在创建 s3 实例时定义您的区域,例如:

const s3 = new S3({
  region: 'eu-central-1',
});

【讨论】:

  • 我还需要在参数中添加一个区域吗?因为 s3 对象是由 key、bucket 和 region 组成的?
  • @StevanNajeeb 您可以在创建 s3 实例时定义您的区域,我将更新答案,例如: const sqs = new S3({ region: 'eu-central-1', } );
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 2019-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多