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  }