You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

newloadp.go 2.2 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package cmdline
  2. import (
  3. "fmt"
  4. "os"
  5. "path/filepath"
  6. "strconv"
  7. "strings"
  8. "github.com/jedib0t/go-pretty/v6/table"
  9. "github.com/spf13/cobra"
  10. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  11. )
  12. func init() {
  13. cmd := &cobra.Command{
  14. Use: "newloadp localPath bucketID packageName storageID...",
  15. Short: "Create a new package then upload an load files to it at the same time",
  16. Args: cobra.MinimumNArgs(4),
  17. Run: func(cmd *cobra.Command, args []string) {
  18. cmdCtx := GetCmdCtx(cmd)
  19. localPath := args[0]
  20. bktID, err := strconv.ParseInt(args[1], 10, 64)
  21. if err != nil {
  22. fmt.Println(err)
  23. return
  24. }
  25. packageName := args[2]
  26. storageIDs := make([]cdssdk.StorageID, 0)
  27. for _, sID := range args[3:] {
  28. sID, err := strconv.ParseInt(sID, 10, 64)
  29. if err != nil {
  30. fmt.Println(err)
  31. return
  32. }
  33. storageIDs = append(storageIDs, cdssdk.StorageID(sID))
  34. }
  35. newloadp(cmdCtx, localPath, cdssdk.BucketID(bktID), packageName, storageIDs)
  36. },
  37. }
  38. rootCmd.AddCommand(cmd)
  39. }
  40. func newloadp(cmdCtx *CommandContext, path string, bucketID cdssdk.BucketID, packageName string, storageIDs []cdssdk.StorageID) {
  41. userID := cdssdk.UserID(1)
  42. up, err := cmdCtx.Cmdline.Svc.Uploader.BeginCreateLoad(userID, bucketID, packageName, storageIDs)
  43. if err != nil {
  44. fmt.Println(err)
  45. return
  46. }
  47. defer up.Abort()
  48. var fileCount int
  49. var totalSize int64
  50. err = filepath.WalkDir(path, func(fname string, fi os.DirEntry, err error) error {
  51. if err != nil {
  52. return nil
  53. }
  54. if fi.IsDir() {
  55. return nil
  56. }
  57. fileCount++
  58. info, err := fi.Info()
  59. if err != nil {
  60. return err
  61. }
  62. totalSize += info.Size()
  63. file, err := os.Open(fname)
  64. if err != nil {
  65. return err
  66. }
  67. defer file.Close()
  68. return up.Upload(fname, info.Size(), file)
  69. })
  70. if err != nil {
  71. fmt.Println(err.Error())
  72. return
  73. }
  74. ret, err := up.Commit()
  75. if err != nil {
  76. fmt.Printf("committing package: %v\n", err)
  77. return
  78. }
  79. wr := table.NewWriter()
  80. wr.AppendHeader(table.Row{"ID", "Name", "FileCount", "TotalSize", "LoadedDirs"})
  81. wr.AppendRow(table.Row{ret.Package.PackageID, ret.Package.Name, fileCount, totalSize, strings.Join(ret.LoadedDirs, "\n")})
  82. fmt.Println(wr.Render())
  83. }

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。