forked from filswan/go-computing-provider
-
Notifications
You must be signed in to change notification settings - Fork 11
/
storage_service.go
103 lines (86 loc) · 3.12 KB
/
storage_service.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package computing
import (
"strings"
"sync"
"github.com/filswan/go-mcs-sdk/mcs/api/bucket"
"github.com/filswan/go-mcs-sdk/mcs/api/common/logs"
"github.com/filswan/go-mcs-sdk/mcs/api/user"
"github.com/swanchain/go-computing-provider/conf"
)
var storage *StorageService
var storageOnce sync.Once
type StorageService struct {
McsApiKey string `json:"mcs_api_key"`
McsAccessToken string `json:"mcs_access_token"`
NetWork string `json:"net_work"`
BucketName string `json:"bucket_name"`
mcsClient *user.McsClient
}
func NewStorageService() *StorageService {
storageOnce.Do(func() {
storage = &StorageService{
McsApiKey: conf.GetConfig().MCS.ApiKey,
McsAccessToken: conf.GetConfig().MCS.AccessToken,
NetWork: conf.GetConfig().MCS.Network,
BucketName: conf.GetConfig().MCS.BucketName,
}
var err error
var mcsClient *user.McsClient
if storage.McsAccessToken != "" {
mcsClient, err = user.LoginByApikey(storage.McsApiKey, storage.McsAccessToken, storage.NetWork)
} else {
mcsClient, err = user.LoginByApikeyV2(storage.McsApiKey, storage.NetWork)
}
if err != nil {
logs.GetLogger().Errorf("Failed creating mcsClient, error: %v", err)
return
}
storage.mcsClient = mcsClient
})
return storage
}
func (storage *StorageService) UploadFileToBucket(objectName, filePath string, replace bool) (*bucket.OssFile, error) {
logs.GetLogger().Infof("uploading file to bucket, objectName: %s, filePath: %s", objectName, filePath)
buketClient := bucket.GetBucketClient(*storage.mcsClient)
file, err := buketClient.GetFile(storage.BucketName, objectName)
if err != nil && !strings.Contains(err.Error(), "record not found") {
logs.GetLogger().Errorf("Failed get file form bucket, error: %v", err)
return nil, err
}
if file != nil {
if err = buketClient.DeleteFile(storage.BucketName, objectName); err != nil {
logs.GetLogger().Errorf("Failed delete file form bucket, error: %v", err)
return nil, err
}
}
if err := buketClient.UploadFile(storage.BucketName, objectName, filePath, replace); err != nil {
logs.GetLogger().Errorf("Failed upload file to bucket, error: %v", err)
return nil, err
}
mcsOssFile, err := buketClient.GetFile(storage.BucketName, objectName)
if err != nil {
logs.GetLogger().Errorf("Failed get file form bucket, error: %v", err)
return nil, err
}
return mcsOssFile, nil
}
func (storage *StorageService) DeleteBucket(bucketName string) error {
return bucket.GetBucketClient(*storage.mcsClient).DeleteBucket(bucketName)
}
func (storage *StorageService) CreateBucket(bucketName string) {
_, err := bucket.GetBucketClient(*storage.mcsClient).CreateBucket(bucketName)
if err != nil {
logs.GetLogger().Errorf("Failed create bucket, error: %v", err)
return
}
}
func (storage *StorageService) CreateFolder(folderName string) {
_, err := bucket.GetBucketClient(*storage.mcsClient).CreateFolder(storage.BucketName, folderName, "")
if err != nil {
logs.GetLogger().Errorf("Failed create folder, error: %v", err)
return
}
}
func (storage *StorageService) GetGatewayUrl() (*string, error) {
return bucket.GetBucketClient(*storage.mcsClient).GetGateway()
}