Golang AWS S3 批量对象创建

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

任何指针?

谢谢!

最佳答案

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

只需将对象放入 /a/b/c/d看起来它已经创建了文件夹 a , b & c但它只是用那个键创建了一个对象。控制台中使用的列表操作在 / 处停止。作为分隔符,因此它提供了类似 View 的文件夹。

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

关于Golang AWS S3 批量对象创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58086849/

相关文章:

go - func 关键字后的两个函数名称 - 它是什么?

amazon-web-services - 使用 Golang-AWS-SDK IoTDataPlane 将 HTTP POST 发送到 AWS IoT

go - 使用 aws-sdk-go 将对象上传到 AWS S3 而无需创建文件

csv - 如何动态获取结构中的字段

go - 在 go routine 中追加 slice

go - Google的logadmin中的条目迭代器从不返回迭代器。

Golang 与 GORM。如何正确地将模型类型传递到方法中?

amazon-web-services - 去 AWS 开发工具包 "Unable to determine service/operation name to be authorized"

amazon-web-services - storagegateway.ListGateways() 返回 "Invalid resource",状态码为 : 400

go - 如何使用虚拟属性