github.com/ngocphuongnb/tetua@v0.0.7-alpha/packages/rclonefs/s3.go (about) 1 package rclonefs 2 3 import ( 4 "context" 5 6 "github.com/ngocphuongnb/tetua/app/fs" 7 "github.com/rclone/rclone/backend/s3" 8 rclonefs "github.com/rclone/rclone/fs" 9 "github.com/rclone/rclone/fs/config/configmap" 10 ) 11 12 type RcloneS3 struct { 13 *BaseRcloneDisk 14 Root string `json:"root"` 15 Provider string `json:"provider"` 16 Bucket string `json:"bucket"` 17 Region string `json:"region"` 18 Endpoint string `json:"endpoint"` 19 ChunkSize rclonefs.SizeSuffix `json:"chunk_size"` 20 AccessKeyID string `json:"access_key_id"` 21 SecretAccessKey string `json:"secret_access_key"` 22 BaseUrl string `json:"base_url"` 23 ACL string `json:"acl"` 24 } 25 26 type RcloneS3Config struct { 27 Name string `json:"name"` 28 Root string `json:"root"` 29 Provider string `json:"provider"` 30 Bucket string `json:"bucket"` 31 Region string `json:"region"` 32 Endpoint string `json:"endpoint"` 33 ChunkSize rclonefs.SizeSuffix `json:"chunk_size"` 34 AccessKeyID string `json:"access_key_id"` 35 SecretAccessKey string `json:"secret_access_key"` 36 BaseUrl string `json:"base_url"` 37 ACL string `json:"acl"` 38 } 39 40 func NewS3(cfg *RcloneS3Config) fs.FSDisk { 41 if cfg.ChunkSize < rclonefs.SizeSuffix(1024*1024*5) { 42 cfg.ChunkSize = rclonefs.SizeSuffix(1024 * 1024 * 5) 43 } 44 45 rs3 := &RcloneS3{ 46 BaseRcloneDisk: &BaseRcloneDisk{ 47 DiskName: cfg.Name, 48 Root: cfg.Root, 49 }, 50 Root: cfg.Root, 51 Provider: cfg.Provider, 52 Region: cfg.Region, 53 Endpoint: cfg.Endpoint, 54 ChunkSize: cfg.ChunkSize, 55 AccessKeyID: cfg.AccessKeyID, 56 SecretAccessKey: cfg.SecretAccessKey, 57 BaseUrl: cfg.BaseUrl, 58 ACL: cfg.ACL, 59 } 60 61 cfgMap := &configmap.Simple{} 62 cfgMap.Set("provider", cfg.Provider) 63 cfgMap.Set("bucket", cfg.Bucket) 64 cfgMap.Set("region", cfg.Region) 65 cfgMap.Set("endpoint", cfg.Endpoint) 66 cfgMap.Set("chunk_size", cfg.ChunkSize.String()) 67 cfgMap.Set("access_key_id", cfg.AccessKeyID) 68 cfgMap.Set("secret_access_key", cfg.SecretAccessKey) 69 cfgMap.Set("acl", cfg.ACL) 70 cfgMap.Set("bucket_acl", cfg.ACL) 71 72 fsDriver, err := s3.NewFs(context.Background(), "s3", cfg.Bucket, cfgMap) 73 74 if err != nil { 75 panic(err) 76 } 77 78 rs3.Fs = fsDriver 79 80 return rs3 81 } 82 83 func (r *RcloneS3) Url(filepath string) string { 84 return r.BaseUrl + filepath 85 } 86 87 func (r *RcloneS3) Delete(ctx context.Context, filepath string) error { 88 return nil 89 }