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  }