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.

local.go 2.0 kB

10 months ago
10 months ago
10 months ago
10 months ago
10 months ago
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package local
  2. import (
  3. "fmt"
  4. "gitlink.org.cn/cloudream/jcs-pub/common/pkgs/storage/factory/reg"
  5. stgtypes "gitlink.org.cn/cloudream/jcs-pub/common/pkgs/storage/types"
  6. jcstypes "gitlink.org.cn/cloudream/jcs-pub/common/types"
  7. )
  8. func init() {
  9. reg.RegisterBuilder[*jcstypes.LocalType](func(detail *jcstypes.UserSpaceDetail) stgtypes.StorageBuilder {
  10. return &builder{
  11. detail: detail,
  12. }
  13. })
  14. }
  15. type builder struct {
  16. stgtypes.EmptyBuilder
  17. detail *jcstypes.UserSpaceDetail
  18. }
  19. func (b *builder) FeatureDesc() stgtypes.FeatureDesc {
  20. return stgtypes.FeatureDesc{}
  21. }
  22. func (b *builder) CreateShardStore(typeOnly bool) (stgtypes.ShardStore, error) {
  23. cred, ok := b.detail.UserSpace.Credential.(*jcstypes.LocalCred)
  24. if !ok {
  25. return nil, fmt.Errorf("invalid storage credential type %T for local storage", b.detail.UserSpace.Credential)
  26. }
  27. if typeOnly {
  28. return (*ShardStore)(nil), nil
  29. }
  30. return NewShardStore(cred.RootDir, b.detail)
  31. }
  32. func (b *builder) CreateBaseStore(typeOnly bool) (stgtypes.BaseStore, error) {
  33. cred, ok := b.detail.UserSpace.Credential.(*jcstypes.LocalCred)
  34. if !ok {
  35. return nil, fmt.Errorf("invalid storage credential type %T for local storage", b.detail.UserSpace.Credential)
  36. }
  37. if typeOnly {
  38. return (*BaseStore)(nil), nil
  39. }
  40. return NewBaseStore(cred.RootDir, b.detail)
  41. }
  42. func (b *builder) CreateMultiparter(typeOnly bool) (stgtypes.Multiparter, error) {
  43. feat := stgtypes.FindFeature[*jcstypes.MultipartUploadFeature](b.detail)
  44. if feat == nil {
  45. return nil, fmt.Errorf("feature %T not found", jcstypes.MultipartUploadFeature{})
  46. }
  47. if typeOnly {
  48. return (*Multiparter)(nil), nil
  49. }
  50. return &Multiparter{
  51. feat: feat,
  52. }, nil
  53. }
  54. func (b *builder) CreateS2STransfer(typeOnly bool) (stgtypes.S2STransfer, error) {
  55. feat := stgtypes.FindFeature[*jcstypes.S2STransferFeature](b.detail)
  56. if feat == nil {
  57. return nil, fmt.Errorf("feature %T not found", jcstypes.S2STransferFeature{})
  58. }
  59. if typeOnly {
  60. return (*S2STransfer)(nil), nil
  61. }
  62. return &S2STransfer{
  63. detail: b.detail,
  64. }, nil
  65. }

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