From d1f87abb19fed0ac5f0e4779c7f9f62394d3b72d Mon Sep 17 00:00:00 2001 From: Qiu Jian Date: Thu, 21 Mar 2019 20:28:55 +0800 Subject: [PATCH] feature: aliyuncli support upload directory --- pkg/util/aliyun/shell/oss.go | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/pkg/util/aliyun/shell/oss.go b/pkg/util/aliyun/shell/oss.go index 7123adfb38..173b551b6c 100644 --- a/pkg/util/aliyun/shell/oss.go +++ b/pkg/util/aliyun/shell/oss.go @@ -2,10 +2,13 @@ package shell import ( "fmt" + "os" + "path/filepath" osslib "github.com/aliyun/aliyun-oss-go-sdk/oss" "yunion.io/x/onecloud/pkg/util/aliyun" + "yunion.io/x/onecloud/pkg/util/fileutils2" "yunion.io/x/onecloud/pkg/util/shellutils" ) @@ -112,8 +115,30 @@ func init() { if len(args.Acl) > 0 { options = append(options, osslib.ACL(str2AclType(args.Acl))) } - err = bucket.UploadFile(args.KEY, args.FILE, 4*1024*1024, options...) - return err + if fileutils2.IsFile(args.FILE) { + err = bucket.UploadFile(args.KEY, args.FILE, 4*1024*1024, options...) + return err + } else if fileutils2.IsDir(args.FILE) { + return filepath.Walk(args.FILE, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if info.Mode().IsRegular() { + rel, _ := filepath.Rel(args.FILE, path) + src := path + dst := filepath.Join(args.KEY, rel) + fmt.Println("upload", src, "to", dst) + uploadErr := bucket.UploadFile(dst, src, + 4*1024*1024, options...) + if uploadErr != nil { + return uploadErr + } + } + return nil + }) + } else { + return fmt.Errorf("Unsupported file type %s", args.FILE) + } }) type OssObjectAclOptions struct {