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.

main.go 2.5 kB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. _ "google.golang.org/grpc/balancer/grpclb"
  6. "gitlink.org.cn/cloudream/client/config"
  7. "strconv"
  8. )
  9. func main() {
  10. err := config.Init()
  11. if err != nil {
  12. fmt.Printf("init config failed, err: %s", err.Error())
  13. os.Exit(1)
  14. }
  15. args := os.Args
  16. switch args[1] {
  17. case "read":
  18. objectID, err := strconv.Atoi(args[3])
  19. if err != nil {
  20. fmt.Printf("invalid object id %s, err: %s", args[3], err.Error())
  21. os.Exit(1)
  22. }
  23. if err := Read(args[2], objectID); err != nil {
  24. fmt.Printf("read failed, err: %s", err.Error())
  25. os.Exit(1)
  26. }
  27. case "write":
  28. bucketID, err := strconv.Atoi(args[3])
  29. if err != nil {
  30. fmt.Printf("invalid bucket id %s, err: %s", args[3], err.Error())
  31. os.Exit(1)
  32. }
  33. numRep, _ := strconv.Atoi(args[5])
  34. if numRep <= 0 || numRep > config.Cfg().MaxReplicateNumber {
  35. fmt.Printf("replicate number should not be more than %d", config.Cfg().MaxReplicateNumber)
  36. os.Exit(1)
  37. }
  38. if err := RepWrite(args[2], bucketID, args[4], numRep); err != nil {
  39. fmt.Printf("rep write failed, err: %s", err.Error())
  40. os.Exit(1)
  41. }
  42. case "ecWrite":
  43. bucketID, err := strconv.Atoi(args[3])
  44. if err != nil {
  45. fmt.Printf("invalid bucket id %s, err: %s", args[3], err.Error())
  46. os.Exit(1)
  47. }
  48. if err := EcWrite(args[2], bucketID, args[4], args[5]); err != nil {
  49. fmt.Printf("ec write failed, err: %s", err.Error())
  50. os.Exit(1)
  51. }
  52. case "move":
  53. objectID, err := strconv.Atoi(args[2])
  54. if err != nil {
  55. fmt.Printf("invalid object id %s, err: %s", args[2], err.Error())
  56. os.Exit(1)
  57. }
  58. stgID, err := strconv.Atoi(args[3])
  59. if err != nil {
  60. fmt.Printf("invalid storage id %s, err: %s", args[3], err.Error())
  61. os.Exit(1)
  62. }
  63. if err := Move(objectID, stgID); err != nil {
  64. fmt.Printf("move failed, err: %s", err.Error())
  65. os.Exit(1)
  66. }
  67. }
  68. /*
  69. TO DO future:
  70. 1. ls命令,显示用户指定桶下的所有对象,及相关的元数据
  71. 2. rm命令,用户指定bucket和object名,执行删除操作
  72. 3. update命令,用户发起对象更新命令,查询元数据,判断对象的冗余方式,删除旧对象(unpin所有的副本或编码块),写入新对象
  73. 4. ipfsStat命令,查看本地有无ipfsdaemon,ipfs目录的使用率
  74. 5. ipfsFlush命令,unpin本地ipfs目录中的所有cid(block)
  75. 6. 改为交互式client,输入用户名及秘钥后进入交互界面
  76. 7. 支持纯缓存类型的IPFS节点,数据一律存在后端存储服务中
  77. */
  78. }

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