|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- package puto
-
- import (
- "fmt"
- "os"
- "strconv"
- "time"
-
- "github.com/inhies/go-bytesize"
- "github.com/spf13/cobra"
- "gitlink.org.cn/cloudream/common/pkgs/iterator"
- cliapi "gitlink.org.cn/cloudream/jcs-pub/client/sdk/api/v1"
- clitypes "gitlink.org.cn/cloudream/jcs-pub/client/types"
- "gitlink.org.cn/cloudream/jcs-pub/jcsctl/cmd"
- )
-
- func init() {
- var opt option
- c := &cobra.Command{
- Use: "puto <local_path> <bucket_name>/<package_name>:<object_path>",
- Short: "upload local file as a object",
- Args: cobra.ExactArgs(2),
- RunE: func(c *cobra.Command, args []string) error {
- ctx := cmd.GetCmdCtx(c)
- return puto(c, ctx, opt, args)
- },
- }
- c.Flags().BoolVar(&opt.UseID, "id", false, "treat the second argument as object id")
- cmd.RootCmd.AddCommand(c)
- }
-
- type option struct {
- UseID bool
- }
-
- func puto(c *cobra.Command, ctx *cmd.CommandContext, opt option, args []string) error {
- var pkgID clitypes.PackageID
- var objPath string
-
- if opt.UseID {
- id, err := strconv.ParseInt(args[1], 10, 64)
- if err != nil {
- return fmt.Errorf("invalid object id: %v", err)
- }
-
- resp, err := ctx.Client.Object().ListByIDs(cliapi.ObjectListByIDs{
- ObjectIDs: []clitypes.ObjectID{clitypes.ObjectID(id)},
- })
- if err != nil {
- return fmt.Errorf("list objects by ids: %v", err)
- }
-
- if resp.Objects[0] == nil {
- return fmt.Errorf("object not found")
- }
-
- pkgID = resp.Objects[0].PackageID
- objPath = resp.Objects[0].Path
-
- } else {
- bkt, pkg, objPath2, ok := cmd.SplitObjectPath(args[1])
- if !ok {
- return fmt.Errorf("invalid object path")
- }
-
- pkgResp, err := ctx.Client.Package().GetByFullName(cliapi.PackageGetByFullName{
- BucketName: bkt,
- PackageName: pkg,
- })
- if err != nil {
- return fmt.Errorf("get package by name: %v", err)
- }
-
- pkgID = pkgResp.Package.PackageID
- objPath = objPath2
- }
-
- file, err := os.Open(args[0])
- if err != nil {
- return fmt.Errorf("open file: %v", err)
- }
- defer file.Close()
-
- info, err := file.Stat()
- if err != nil {
- return err
- }
-
- fmt.Printf("%v\n", objPath)
-
- startTime := time.Now()
-
- _, err = ctx.Client.Object().Upload(cliapi.ObjectUpload{
- ObjectUploadInfo: cliapi.ObjectUploadInfo{
- PackageID: pkgID,
- },
- Files: iterator.Array(&cliapi.UploadingObject{
- Path: objPath,
- File: file,
- }),
- })
- if err != nil {
- return fmt.Errorf("upload file %v: %w", objPath, err)
- }
-
- dt := time.Since(startTime)
- fmt.Printf("size: %v, time: %v, speed: %v/s\n", bytesize.ByteSize(info.Size()), dt, bytesize.ByteSize(int64(float64(info.Size())/dt.Seconds())))
- return nil
- }
|