forked from goodrain/rainbond
/
s3.go
79 lines (67 loc) · 1.59 KB
/
s3.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
package cloudos
import (
"io"
"os"
"strconv"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3"
"github.com/wutong-paas/wutong/util"
)
type s3Driver struct {
s3 *s3.S3
*Config
}
func newS3(cfg *Config) (CloudOSer, error) {
s3Config := &aws.Config{
Credentials: credentials.NewStaticCredentials(cfg.AccessKey, cfg.SecretKey, ""),
Endpoint: util.Ptr(cfg.Endpoint),
Region: util.Ptr("us-east-1"),
DisableSSL: util.Ptr(true),
S3ForcePathStyle: util.Ptr(true),
}
sess := session.New(s3Config)
s3obj := s3.New(sess)
s3Driver := s3Driver{
s3: s3obj,
Config: cfg,
}
return &s3Driver, nil
}
func (s *s3Driver) PutObject(objkey, filepath string) error {
fp, err := os.Open(filepath)
if err != nil {
return err
}
defer fp.Close()
_, err = s.s3.PutObject(&s3.PutObjectInput{
Bucket: util.Ptr(s.BucketName),
Key: util.Ptr(objkey),
Body: fp,
})
return err
}
func (s *s3Driver) GetObject(objkey, filePath string) error {
resp, err := s.s3.GetObject(&s3.GetObjectInput{
Bucket: util.Ptr(s.BucketName),
Key: util.Ptr(objkey),
Range: util.Ptr("bytes=" + strconv.FormatInt(0, 10) + "-"),
})
if err != nil {
return err
}
b, err := io.ReadAll(resp.Body)
if err != nil {
return err
}
os.WriteFile(filePath, b, os.ModePerm)
return nil
}
func (s *s3Driver) DeleteObject(objkey string) error {
_, err := s.s3.DeleteObject(&s3.DeleteObjectInput{
Bucket: util.Ptr(s.BucketName),
Key: util.Ptr(objkey),
})
return err
}