【问题标题】:how to get only one object from a bucket?如何从桶中只获取一个对象?
【发布时间】:2021-06-07 23:30:17
【问题描述】:

我一次只需要从 S3 存储桶中获取一个对象。 而且我只找到了获取存储桶中所有对象的API。有没有办法只获取一个? 我将使用某个位置或索引一次获取一个对象。

    result, err := w.Client.ListObjectsV2(ctx, input)
    if err != nil {
        fmt.Println("Got an error retrieving objects:")
        fmt.Println(err)
    }
    for _, item := range result.Contents {
        fmt.Println("Name:          ", *item.Key)
        fmt.Println("Last modified: ", *item.LastModified)
        fmt.Println("Size:          ", item.Size)
        fmt.Println("Storage class: ", item.StorageClass)
        fmt.Println("")
    }

【问题讨论】:

  • “只得到一个对象”是什么意思? ListObjects() 命令只返回对象的列表,而不是对象本身。你不能遍历返回的列表,一次处理一个吗?
  • 您可以指定 MaxKeys=1 并使用 StartAfter 或 ContinuationToken 进行后续列表请求,但我会质疑您为什么要首先这样做。
  • 我一次只需要一个对象..我不想得到所有对象而只使用一个对象,因为这会浪费时间和空间@JohnRotenstein
  • @EminLaletovic 哦,谢谢!但这似乎是 sdk 的第 1 版。我使用的是 v2

标签: amazon-web-services go amazon-s3 aws-sdk-go


【解决方案1】:

您可以通过在ListObjectsV2Input 中指示 MaxKeys=1 来请求返回的最大 S3 密钥数:

MaxKeys:设置响应中返回的最大键数。默认情况下,该操作最多返回 1,000 个键名。响应可能包含较少的键,但永远不会包含更多。

要获取下一个 S3 密钥,您可以在后续的 ListObjectsV2 请求中使用 StartAfterContinuationToken

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 1970-01-01
    • 2018-09-12
    • 2014-11-05
    • 1970-01-01
    • 2013-08-04
    • 2021-05-09
    • 1970-01-01
    • 2016-09-05
    相关资源
    最近更新 更多