【问题标题】:List and display all photos from S3 bucket folder列出并显示 S3 存储桶文件夹中的所有照片
【发布时间】:2021-06-05 19:19:23
【问题描述】:

在我的应用中,用户可以将图像上传到他们在 S3 存储桶中的文件夹中。当前与从 S3 上传和检索图像相关的请求通过 API Gateway 处理,用户通过 Cognito 进行身份验证。

有没有一种方法可以列出存储桶文件夹中的所有对象并能够显示所有图像?

我问的问题与this one 相同,只是我只希望经过身份验证的用户能够访问它。

有没有办法通过 Lambda 函数检索它们?

任何帮助表示赞赏。

更新

我已尝试实现 S3 的 listObjectsV2 函数,该函数不会返回每个对象的辞职 URL。有没有办法做到这一点?

函数响应:

{
    "IsTruncated": false,
    "Contents": [
        {
            "Key": "username/image/Screenshot 2021-02-22 at 13.24.55.png",
            "LastModified": "2021-03-07T19:43:05.000Z",
            "ETag",
            "Size": 22436,
            "StorageClass": "STANDARD"
        }
    ],
    "Name": "user-images",
    "Prefix": "username/",
    "MaxKeys": 1000,
    "CommonPrefixes": [],
    "KeyCount": 1
}

【问题讨论】:

  • 如果您的用户只能安全地上传到他们的个人文件夹,那么您一定已经解决了身份验证和授权问题,不是吗?
  • 是的,这是微不足道的可能,取决于语言:stackoverflow.com/questions/42394429/…alexwlchan.net/2017/07/listing-s3-keys 等等。关于这个有成千上万的问题。
  • @jarmod 是的,但我希望能够在后端调用像 listObjects 这样可以返回链接以查看图像的函数。
  • @luk2302 感谢您的回复,在我的情况下,列出密钥不足以显示每张照片的预览,因为每张照片都受到 Cognito Auth 的保护......否则我'我在这里失明,但这就是我的理解
  • 通常 S3 对象是不公开的,您的后端会获取对象列表,然后为每个对象生成临时的预签名 URL,以便前端可以检索它们。

标签: amazon-web-services amazon-s3 aws-lambda aws-api-gateway photo


【解决方案1】:

提供私人内容的推荐方法是:

  • 不要使用存储桶策略
  • 将所有对象保持为私有
  • 用户验证您的应用程序
  • 当用户请求访问私有对象,或者您希望在页面中包含私有对象(例如在<img src="..."> 标签中)时,应用程序应该检查用户是否被允许访问对象
  • 如果他们被允许访问对象,应用程序会生成一个Amazon S3 pre-signed URLs,它提供对私有对象的限时访问
  • 当用户的浏览器将预签名的 URL 发送到 S3 时,Amazon S3 将检查 URL 是否正确以及时间段是否过期。如果没问题,它会返回私有对象

这样,您的应用程序管理与访问相关的所有权限,但内容本身由 Amazon S3 提供。这允许复杂的访问逻辑,例如用户与其他用户共享照片。

【讨论】:

  • 嗨,约翰,感谢您的回复。我正在寻找一种方法来在一个函数调用中检索 S3 存储桶中同一文件夹下的图像列表。它还需要返回图像的预签名 URL,因为对象是私有的。有没有允许这样做的功能?谢谢。
  • @AlexGoodison 是的,有一种方法可以用一个函数来做到这一点。 编写一个函数并让它执行多项必要的操作(列出对象、根据需要进行过滤、创建预签名的 URL)。
  • @AlexGoodison 预签名 URL 可以在您自己的代码中计算,无需进行 API 调用。它基本上是一个使用密钥的哈希函数。
猜你喜欢
  • 2022-11-03
  • 2018-11-20
  • 2014-07-18
  • 2018-04-19
  • 1970-01-01
  • 2013-01-17
  • 1970-01-01
  • 1970-01-01
  • 2020-01-24
相关资源
最近更新 更多