我正在尝试在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)
}
}
有指针吗?
谢谢!
答案 0 :(得分:0)
在S3中没有“文件夹”之类的东西。简单来说,S3是一个大的键/值存储。列表操作支持查找以某个前缀开头并且可以在已知定界符(例如/
)处停止的键的子集,从而使其看起来像具有语义的文件系统。
只需将一个对象放置到/a/b/c/d
上,就好像它已经创建了文件夹a
,b
和c
一样,但是仅使用该键创建了一个对象。控制台中使用的列表操作作为分隔符在/
处停止,因此它提供了类似于view的文件夹。
不能将多个S3对象放在一个操作中。每个操作都必须作为一个单独的操作上传。使用Go,我建议您可以使用一个频道,将所有需要上传的内容放入频道,并让多个并发工作人员处理这些上传内容以提高性能。您需要进行一些调整以找到最佳数量。如果没有用于此的库,我不会感到惊讶,因为这将是一个非常常见的S3用例。