Golang AWS S3 批处理对象创建

Golang AWS S3 batch object creation

我正在尝试在 s3 存储桶中创建一堆 "folders"。试图复制与 https://github.com/aws/aws-sdk-go/blob/master/service/s3/s3manager/batch_test.go#L742 但这个东西需要一个 "Body" ,这在我的情况下并不是真正需要的。 到目前为止,以下代码可以满足我的需要,但我觉得有更好的 "batched" 方法可以实现。

serv := s3.New(session.New(s3h.Config))

for _, i1 := range []string{"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "a", "b", "c", "d", "e", "f"} {
    for _, i2 := range []string{"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "a", "b", "c", "d", "e", "f"} {
        req := &s3.PutObjectInput{
            Bucket: aws.String(S3_BUCKET),
            Key:    aws.String(i1 + i2 + "/"),
        }
        serv.PutObject(req)
    }
}

有什么指点吗?

谢谢!

S3中没有"folders"这样的东西。在简单的高层,S3 是一个很大的 key/value 商店。列表操作支持查找以特定前缀开头并可以在已知分隔符(例如 /)处停止的键子集,使其看起来像是具有类似文件系统的语义。

只是将一个对象放入 /a/b/c/d,看起来它已经创建了文件夹 abc,但它只是使用该键创建了一个对象。控制台中使用的列表操作停止在 / 作为分隔符,因此它提供了一个像视图这样的文件夹。

您不能在单个操作中放置多个 S3 对象。每个都必须作为单独的操作上传。使用 Go,我建议您可以有一个频道,您可以放置​​所有需要的上传,并让多个并发工作人员处理这些以提高性能。您需要进行一些调整才能找到最佳数量。如果还没有一个库,我不会感到惊讶,因为这将是一个很常见的 S3 用例。