|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- 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.VarID `json:"uploadID"`
- ObjectID *exec.VarID `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
- }
-
- 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.VarID `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
- }
|