|
|
@@ -2,152 +2,21 @@ package uploadersdk |
|
|
|
|
|
|
|
|
import ( |
|
|
import ( |
|
|
"fmt" |
|
|
"fmt" |
|
|
"gitlink.org.cn/cloudream/common/pkgs/types" |
|
|
|
|
|
cdssdk "gitlink.org.cn/cloudream/common/sdks/storage" |
|
|
|
|
|
"gitlink.org.cn/cloudream/common/sdks/storage/cdsapi" |
|
|
"gitlink.org.cn/cloudream/common/sdks/storage/cdsapi" |
|
|
"gitlink.org.cn/cloudream/common/utils/http2" |
|
|
"gitlink.org.cn/cloudream/common/utils/http2" |
|
|
"gitlink.org.cn/cloudream/common/utils/serder" |
|
|
"gitlink.org.cn/cloudream/common/utils/serder" |
|
|
|
|
|
"mime/multipart" |
|
|
"net/url" |
|
|
"net/url" |
|
|
"strings" |
|
|
"strings" |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
//type DataScheduleReq struct { |
|
|
|
|
|
// PackageID cdssdk.PackageID `json:"packageID"` |
|
|
|
|
|
// DataType string `json:"dataType"` |
|
|
|
|
|
// ScheduleTarget ScheduleTarget `json:"scheduleTarget"` |
|
|
|
|
|
//} |
|
|
|
|
|
|
|
|
|
|
|
//type DataScheduleResp struct { |
|
|
|
|
|
// Results []sch.DataScheduleResult `json:"data"` |
|
|
|
|
|
//} |
|
|
|
|
|
|
|
|
|
|
|
//type TmpDataScheduleResult struct { |
|
|
|
|
|
// Cluster sch.DataDetail `json:"cluster"` |
|
|
|
|
|
// PackageID cdssdk.PackageID `json:"packageID"` |
|
|
|
|
|
// Status bool `json:"status"` |
|
|
|
|
|
// Msg string `json:"msg"` |
|
|
|
|
|
//} |
|
|
|
|
|
|
|
|
|
|
|
//func (c *Client) DataSchedule(req DataScheduleReq) ([]sch.DataScheduleResult, error) { |
|
|
|
|
|
// targetUrl, err := url.JoinPath(c.baseURL, "/dataSchedule") |
|
|
|
|
|
// if err != nil { |
|
|
|
|
|
// return nil, err |
|
|
|
|
|
// } |
|
|
|
|
|
// |
|
|
|
|
|
// resp, err := http2.PostJSON(targetUrl, http2.RequestParam{ |
|
|
|
|
|
// Body: req, |
|
|
|
|
|
// }) |
|
|
|
|
|
// if err != nil { |
|
|
|
|
|
// return nil, err |
|
|
|
|
|
// } |
|
|
|
|
|
// println(resp.Body) |
|
|
|
|
|
// |
|
|
|
|
|
// contType := resp.Header.Get("Content-Type") |
|
|
|
|
|
// if strings.Contains(contType, http2.ContentTypeJSON) { |
|
|
|
|
|
// var codeResp response[[]TmpDataScheduleResult] |
|
|
|
|
|
// if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { |
|
|
|
|
|
// return nil, fmt.Errorf("parsing response: %w", err) |
|
|
|
|
|
// } |
|
|
|
|
|
// |
|
|
|
|
|
// if codeResp.Code == ResponseCodeOK { |
|
|
|
|
|
// var results []sch.DataScheduleResult |
|
|
|
|
|
// for _, tmpResult := range codeResp.Data { |
|
|
|
|
|
// result := sch.DataScheduleResult{ |
|
|
|
|
|
// PackageID: tmpResult.PackageID, |
|
|
|
|
|
// Status: tmpResult.Status, |
|
|
|
|
|
// Msg: tmpResult.Msg, |
|
|
|
|
|
// Clusters: []sch.DataDetail{ |
|
|
|
|
|
// tmpResult.Cluster, |
|
|
|
|
|
// }, |
|
|
|
|
|
// } |
|
|
|
|
|
// results = append(results, result) |
|
|
|
|
|
// } |
|
|
|
|
|
// return results, nil |
|
|
|
|
|
// } |
|
|
|
|
|
// |
|
|
|
|
|
// return nil, codeResp.ToError() |
|
|
|
|
|
// } |
|
|
|
|
|
// |
|
|
|
|
|
// return nil, fmt.Errorf("unknow response content type: %s", contType) |
|
|
|
|
|
//} |
|
|
|
|
|
|
|
|
|
|
|
type UploadReq struct { |
|
|
|
|
|
DataType string `json:"dataType"` |
|
|
|
|
|
Source UploadSource `json:"source"` |
|
|
|
|
|
Target UploadTarget `json:"target"` |
|
|
|
|
|
//StorageIDs []cdssdk.StorageID `json:"storageIDs"` |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
type UploadSource interface { |
|
|
|
|
|
Noop() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var UploadSourceTypeUnion = types.NewTypeUnion[UploadSource]( |
|
|
|
|
|
(*PackageSource)(nil), |
|
|
|
|
|
(*UrlSource)(nil), |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
var _ = serder.UseTypeUnionInternallyTagged(&UploadSourceTypeUnion, "type") |
|
|
|
|
|
|
|
|
|
|
|
type PackageSource struct { |
|
|
|
|
|
serder.Metadata `union:"jcs"` |
|
|
|
|
|
UploadSourceBase |
|
|
|
|
|
Type string `json:"type"` |
|
|
|
|
|
PackageID cdssdk.PackageID `json:"packageID"` |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
type UrlSource struct { |
|
|
|
|
|
serder.Metadata `union:"url"` |
|
|
|
|
|
UploadSourceBase |
|
|
|
|
|
Type string `json:"type"` |
|
|
|
|
|
Url string `json:"url"` |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
type UploadSourceBase struct{} |
|
|
|
|
|
|
|
|
|
|
|
func (d *UploadSourceBase) Noop() {} |
|
|
|
|
|
|
|
|
|
|
|
type UploadTarget interface { |
|
|
|
|
|
Noop() |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
var UploadTargetTypeUnion = types.NewTypeUnion[UploadTarget]( |
|
|
|
|
|
(*UrlTarget)(nil), |
|
|
|
|
|
(*ApiTarget)(nil), |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
var _ = serder.UseTypeUnionInternallyTagged(&UploadTargetTypeUnion, "type") |
|
|
|
|
|
|
|
|
|
|
|
type UrlTarget struct { |
|
|
|
|
|
serder.Metadata `union:"url"` |
|
|
|
|
|
UploadTargetBase |
|
|
|
|
|
Type string `json:"type"` |
|
|
|
|
|
ClusterID ClusterID `json:"clusterId"` |
|
|
|
|
|
JCSUploadInfo cdsapi.ObjectUploadInfo `form:"JCSUploadInfo"` |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
type ApiTarget struct { |
|
|
|
|
|
serder.Metadata `union:"api"` |
|
|
|
|
|
UploadTargetBase |
|
|
|
|
|
Type string `json:"type"` |
|
|
|
|
|
Clusters []ClusterID `json:"clusters"` |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
type UploadTargetBase struct{} |
|
|
|
|
|
|
|
|
|
|
|
func (d *UploadTargetBase) Noop() {} |
|
|
|
|
|
|
|
|
|
|
|
type UploadResp struct { |
|
|
|
|
|
PackageID cdssdk.PackageID `json:"packageID"` |
|
|
|
|
|
ObjectIDs []cdssdk.ObjectID `json:"objectIDs"` |
|
|
|
|
|
ClusterID ClusterID `json:"clusterID"` |
|
|
|
|
|
JsonData string `json:"jsonData"` |
|
|
|
|
|
Status bool `json:"status"` |
|
|
|
|
|
Message string `json:"message"` |
|
|
|
|
|
|
|
|
type ObjectUploadReq struct { |
|
|
|
|
|
Info cdsapi.ObjectUploadInfo `form:"info" binding:"required"` |
|
|
|
|
|
Files []*multipart.FileHeader `form:"files"` |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
func (c *Client) Upload(req UploadReq) (*UploadResp, error) { |
|
|
|
|
|
targetUrl, err := url.JoinPath(c.baseURL, "/dataUpload") |
|
|
|
|
|
|
|
|
func (c *Client) Upload(req ObjectUploadReq) (*cdsapi.ObjectUploadResp, error) { |
|
|
|
|
|
targetUrl, err := url.JoinPath(c.baseURL, "/object/upload") |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
return nil, err |
|
|
return nil, err |
|
|
} |
|
|
} |
|
|
@@ -161,7 +30,7 @@ func (c *Client) Upload(req UploadReq) (*UploadResp, error) { |
|
|
|
|
|
|
|
|
contType := resp.Header.Get("Content-Type") |
|
|
contType := resp.Header.Get("Content-Type") |
|
|
if strings.Contains(contType, http2.ContentTypeJSON) { |
|
|
if strings.Contains(contType, http2.ContentTypeJSON) { |
|
|
var codeResp response[UploadResp] |
|
|
|
|
|
|
|
|
var codeResp response[cdsapi.ObjectUploadResp] |
|
|
if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { |
|
|
if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { |
|
|
return nil, fmt.Errorf("parsing response: %w", err) |
|
|
return nil, fmt.Errorf("parsing response: %w", err) |
|
|
} |
|
|
} |
|
|
|