Browse Source

增加压缩下载Package的接口

pengcheng
Sydonian 1 year ago
parent
commit
b68677f3d8
1 changed files with 70 additions and 0 deletions
  1. +70
    -0
      sdks/storage/cdsapi/package.go

+ 70
- 0
sdks/storage/cdsapi/package.go View File

@@ -1,10 +1,17 @@
package cdsapi

import (
"context"
"fmt"
"io"
"mime"
"net/http"
"net/url"
"strings"
"time"

v4 "github.com/aws/aws-sdk-go-v2/aws/signer/v4"
"github.com/aws/aws-sdk-go-v2/credentials"
"gitlink.org.cn/cloudream/common/consts/errorcode"
"gitlink.org.cn/cloudream/common/pkgs/iterator"
"gitlink.org.cn/cloudream/common/sdks"
@@ -146,6 +153,69 @@ func (c *PackageService) CreateLoad(req PackageCreateLoad) (*PackageCreateLoadRe
return nil, codeResp.ToError()
}

const PackageDownloadPath = "/v1/package/download"

type PackageDownload struct {
UserID cdssdk.UserID `url:"userID" form:"userID" binding:"required"`
PackageID cdssdk.PackageID `url:"packageID" form:"packageID" binding:"required"`
}

func (r *PackageDownload) MakeParam() *sdks.RequestParam {
return sdks.MakeJSONParam(http.MethodGet, PackageDownloadPath, r)
}

type DownloadingPackage struct {
Name string
File io.ReadCloser
}

func (c *PackageService) Download(req PackageDownload) (*DownloadingPackage, error) {
httpReq, err := req.MakeParam().MakeRequest(c.cfg.URL)
if err != nil {
return nil, err
}

if c.cfg.AccessKey != "" && c.cfg.SecretKey != "" {
prod := credentials.NewStaticCredentialsProvider(c.cfg.AccessKey, c.cfg.SecretKey, "")
cred, err := prod.Retrieve(context.TODO())
if err != nil {
return nil, err
}

signer := v4.NewSigner()
err = signer.SignHTTP(context.Background(), cred, httpReq, "", AuthService, AuthRegion, time.Now())
if err != nil {
return nil, err
}
}

resp, err := http.DefaultClient.Do(httpReq)
if err != nil {
return nil, err
}

contType := resp.Header.Get("Content-Type")

if strings.Contains(contType, http2.ContentTypeJSON) {
var codeResp response[any]
if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil {
return nil, fmt.Errorf("parsing response: %w", err)
}

return nil, codeResp.ToError()
}

_, params, err := mime.ParseMediaType(resp.Header.Get("Content-Disposition"))
if err != nil {
return nil, fmt.Errorf("parsing content disposition: %w", err)
}

return &DownloadingPackage{
Name: params["filename"],
File: resp.Body,
}, nil
}

const PackageDeletePath = "/package/delete"

type PackageDelete struct {


Loading…
Cancel
Save