Golang AWS S3批处理对象创建

时间:2019-09-24 19:13:24

标签: go aws-sdk-go

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

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)
    }
}

有指针吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

在S3中没有“文件夹”之类的东西。简单来说,S3是一个大的键/值存储。列表操作支持查找以某个前缀开头并且可以在已知定界符(例如/)处停止的键的子集,从而使其看起来像具有语义的文件系统。

只需将一个对象放置到/a/b/c/d上,就好像它已经创建了文件夹abc一样,但是仅使用该键创建了一个对象。控制台中使用的列表操作作为分隔符在/处停止,因此它提供了类似于view的文件夹。

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