@@ -16,6 +16,12 @@ import (
16
16
17
17
var _ storage.Storage = & OSS {}
18
18
19
+ const (
20
+ ServerSideEncryptionAes256 = "AES256"
21
+ ServerSideEncryptionKMS = "KMS"
22
+ ServerSideEncryptionSM4 = "SM4"
23
+ )
24
+
19
25
func New (cfg * Config , node string , l log.LogEvent ) (* OSS , error ) {
20
26
if err := cfg .Cast (); err != nil {
21
27
return nil , fmt .Errorf ("cast config: %w" , err )
@@ -61,9 +67,28 @@ func (o *OSS) Save(name string, data io.Reader, options ...storage.Option) error
61
67
o .log .Debug ("uploading %s" , name )
62
68
}
63
69
70
+ req := & oss.PutObjectRequest {
71
+ Bucket : oss .Ptr (o .cfg .Bucket ),
72
+ Key : oss .Ptr (path .Join (o .cfg .Prefix , name )),
73
+ }
74
+
75
+ if o .cfg .ServerSideEncryption != nil {
76
+ sse := o .cfg .ServerSideEncryption
77
+ switch sse .EncryptionMethod {
78
+ case ServerSideEncryptionSM4 :
79
+ req .ServerSideEncryption = oss .Ptr (ServerSideEncryptionSM4 )
80
+ case ServerSideEncryptionKMS :
81
+ req .ServerSideEncryption = oss .Ptr (ServerSideEncryptionKMS )
82
+ req .ServerSideDataEncryption = oss .Ptr (sse .EncryptionAlgorithm )
83
+ req .ServerSideEncryptionKeyId = oss .Ptr (sse .EncryptionKeyID )
84
+ default :
85
+ req .ServerSideEncryption = oss .Ptr (ServerSideEncryptionAes256 )
86
+ }
87
+ }
88
+
64
89
partSize := storage .ComputePartSize (
65
90
opts .Size ,
66
- defaultPartSize ,
91
+ o . cfg . UploadPartSize ,
67
92
oss .MinPartSize ,
68
93
int64 (o .cfg .MaxUploadParts ),
69
94
int64 (o .cfg .UploadPartSize ),
@@ -72,11 +97,7 @@ func (o *OSS) Save(name string, data io.Reader, options ...storage.Option) error
72
97
uploader := oss .NewUploader (o .ossCli , func (uo * oss.UploaderOptions ) {
73
98
uo .PartSize = partSize
74
99
})
75
-
76
- _ , err := uploader .UploadFrom (context .Background (), & oss.PutObjectRequest {
77
- Bucket : oss .Ptr (o .cfg .Bucket ),
78
- Key : oss .Ptr (path .Join (o .cfg .Prefix , name )),
79
- }, data )
100
+ _ , err := uploader .UploadFrom (context .Background (), req , data )
80
101
81
102
return errors .Wrap (err , "put object" )
82
103
}
@@ -101,10 +122,12 @@ func (o *OSS) SourceReader(name string) (io.ReadCloser, error) {
101
122
func (o * OSS ) FileStat (name string ) (storage.FileInfo , error ) {
102
123
inf := storage.FileInfo {}
103
124
104
- res , err := o . ossCli . HeadObject ( context . Background (), & oss.HeadObjectRequest {
125
+ req := & oss.HeadObjectRequest {
105
126
Bucket : oss .Ptr (o .cfg .Bucket ),
106
127
Key : oss .Ptr (path .Join (o .cfg .Prefix , name )),
107
- })
128
+ }
129
+
130
+ res , err := o .ossCli .HeadObject (context .Background (), req )
108
131
if err != nil {
109
132
var serr * oss.ServiceError
110
133
if errors .As (err , & serr ) && serr .Code == "NoSuchKey" {
@@ -187,12 +210,27 @@ func (o *OSS) Delete(name string) error {
187
210
188
211
// Copy makes a copy of the src object/file under dst name
189
212
func (o * OSS ) Copy (src , dst string ) error {
190
- uploader := oss .NewCopier (o .ossCli )
191
- _ , err := uploader .Copy (context .Background (), & oss.CopyObjectRequest {
213
+ req := & oss.CopyObjectRequest {
192
214
Bucket : oss .Ptr (o .cfg .Bucket ),
193
215
Key : oss .Ptr (path .Join (o .cfg .Prefix , dst )),
194
216
SourceBucket : oss .Ptr (o .cfg .Bucket ),
195
217
SourceKey : oss .Ptr (path .Join (o .cfg .Prefix , src )),
196
- })
218
+ }
219
+
220
+ if o .cfg .ServerSideEncryption != nil {
221
+ sse := o .cfg .ServerSideEncryption
222
+ switch sse .EncryptionMethod {
223
+ case ServerSideEncryptionSM4 :
224
+ req .ServerSideEncryption = oss .Ptr (ServerSideEncryptionSM4 )
225
+ case ServerSideEncryptionKMS :
226
+ req .ServerSideEncryption = oss .Ptr (ServerSideEncryptionKMS )
227
+ req .ServerSideDataEncryption = oss .Ptr (sse .EncryptionAlgorithm )
228
+ req .ServerSideEncryptionKeyId = oss .Ptr (sse .EncryptionKeyID )
229
+ default :
230
+ req .ServerSideEncryption = oss .Ptr (ServerSideEncryptionAes256 )
231
+ }
232
+ }
233
+ copier := oss .NewCopier (o .ossCli , func (co * oss.CopierOptions ) {})
234
+ _ , err := copier .Copy (context .Background (), req )
197
235
return errors .Wrap (err , "copy object" )
198
236
}
0 commit comments