github.com/qiniu/go-sdk/v7@v7.27.0/storagev2/objects/objects_manager.go (about) 1 package objects 2 3 import ( 4 "context" 5 6 "github.com/qiniu/go-sdk/v7/storagev2/apis" 7 httpclient "github.com/qiniu/go-sdk/v7/storagev2/http_client" 8 ) 9 10 type ( 11 // 对象管理器 12 ObjectsManager struct { 13 storage *apis.Storage 14 options httpclient.Options 15 listerVersion ListerVersion 16 batchOpsExecutor BatchOpsExecutor 17 } 18 19 // 对象管理器选项 20 ObjectsManagerOptions struct { 21 // HTTP 客户端选项 22 httpclient.Options 23 24 // 分片列举版本,如果不填写,默认为 V1 25 ListerVersion ListerVersion 26 27 // 批处理执行器,如果不填写,默认为串型批处理执行器 28 BatchOpsExecutor BatchOpsExecutor 29 } 30 31 // 批处理选项 32 BatchOptions struct { 33 // 批处理执行器,如果不填写,默认使用 ObjectsManager 的批处理执行器 34 BatchOpsExecutor BatchOpsExecutor 35 } 36 ) 37 38 // 创建对象管理器 39 func NewObjectsManager(options *ObjectsManagerOptions) *ObjectsManager { 40 if options == nil { 41 options = &ObjectsManagerOptions{} 42 } 43 batchOpsExecutor := options.BatchOpsExecutor 44 if batchOpsExecutor == nil { 45 batchOpsExecutor = NewConcurrentBatchOpsExecutor(nil) 46 } 47 return &ObjectsManager{ 48 storage: apis.NewStorage(&options.Options), 49 options: options.Options, 50 listerVersion: options.ListerVersion, 51 batchOpsExecutor: batchOpsExecutor, 52 } 53 } 54 55 // 获取存储空间 56 func (objectsManager *ObjectsManager) Bucket(name string) *Bucket { 57 return &Bucket{name: name, objectsManager: objectsManager} 58 } 59 60 // 执行批处理操作 61 func (objectsManager *ObjectsManager) Batch(ctx context.Context, operations []Operation, options *BatchOptions) error { 62 if len(operations) == 0 { 63 return nil 64 } 65 if options == nil { 66 options = &BatchOptions{} 67 } 68 batchOpsExecutor := options.BatchOpsExecutor 69 if batchOpsExecutor == nil { 70 batchOpsExecutor = objectsManager.batchOpsExecutor 71 } 72 return batchOpsExecutor.ExecuteBatchOps(ctx, operations, objectsManager.storage) 73 }