Browse Source

新增段合并接口

gitlink
JeshuaRen 1 year ago
parent
commit
6ee1a05920
1 changed files with 124 additions and 0 deletions
  1. +124
    -0
      common/pkgs/ioswitch2/ops2/multipart.go

+ 124
- 0
common/pkgs/ioswitch2/ops2/multipart.go View File

@@ -0,0 +1,124 @@
package ops2

import (
"encoding/json"
"gitlink.org.cn/cloudream/common/pkgs/ioswitch/dag"
"gitlink.org.cn/cloudream/common/pkgs/ioswitch/exec"
"gitlink.org.cn/cloudream/common/sdks/cloudstorage"
cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
)

func init() {
exec.UseOp[*MultipartManage]()
exec.UseOp[*MultipartUpload]()
}

type MultipartManage struct {
Address cdssdk.StorageAddress `json:"address"`
UploadID *exec.StringVar `json:"uploadID"`
ObjectID *exec.StringVar `json:"objectID"`
}

func (o *MultipartManage) Execute(ctx *exec.ExecContext, e *exec.Executor) error {

var oss cloudstorage.ObjectStorage

switch addr := o.Address.(type) {
case *cdssdk.LocalStorageAddress:
err := json.Unmarshal([]byte(addr.String()), &oss)
if err != nil {
return err
}
}

client, err := cloudstorage.NewObjectStorageClient(oss)
if err != nil {
return err
}
defer client.Close()

uploadID, err := client.InitiateMultipartUpload("")
if err != nil {
return err
}
o.UploadID.Value = uploadID
e.PutVars(o.UploadID)

objectID, err := client.CompleteMultipartUpload()
if err != nil {
return err
}
o.ObjectID.Value = objectID
e.PutVars(o.ObjectID)

return nil
}

func (o *MultipartManage) String() string {
return "MultipartManage"
}

type MultipartManageNode struct {
dag.NodeBase
Address cdssdk.StorageAddress
}

func (b *GraphNodeBuilder) NewMultipartManage(addr cdssdk.StorageAddress) *MultipartManageNode {
node := &MultipartManageNode{
Address: addr,
}
b.AddNode(node)
return node
}

func (t *MultipartManageNode) GenerateOp() (exec.Op, error) {
return &MultipartManage{
Address: t.Address,
}, nil
}

type MultipartUpload struct {
Address cdssdk.StorageAddress `json:"address"`
FileMD5 *exec.StringVar `json:"fileMD5"`
}

func (o *MultipartUpload) Execute(ctx *exec.ExecContext, e *exec.Executor) error {
var oss cloudstorage.ObjectStorage
switch addr := o.Address.(type) {
case *cdssdk.LocalStorageAddress:
err := json.Unmarshal([]byte(addr.String()), &oss)
if err != nil {
return err
}
}

client, err := cloudstorage.NewObjectStorageClient(oss)
if err != nil {
return err
}
client.UploadPart()
return nil
}

func (o *MultipartUpload) String() string {
return "MultipartUpload"
}

type MultipartUploadNode struct {
dag.NodeBase
Address cdssdk.StorageAddress
}

func (b *GraphNodeBuilder) NewMultipartUpload(addr cdssdk.StorageAddress) *MultipartUploadNode {
node := &MultipartUploadNode{
Address: addr,
}
b.AddNode(node)
return node
}

func (t MultipartUploadNode) GenerateOp() (exec.Op, error) {
return &MultipartUpload{
Address: t.Address,
}, nil
}

Loading…
Cancel
Save