/
aws.go
88 lines (72 loc) · 2.11 KB
/
aws.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
package oss
import (
"errors"
"io"
"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/aws/aws-sdk-go/service/s3/s3manager"
"github.com/sirupsen/logrus"
"github.com/spf13/viper"
_ "github.com/westfruit/kcc-toolkit/conf"
"github.com/westfruit/kcc-toolkit/convert"
)
var (
awsPrefix = "[oss-aws]"
)
type AwsConf struct {
AccessKeyId string
AccessKeySecret string
EndPoint string
Region string
BucketName string
UploadPath string
}
func init() {
// 初始化aws
if viper.IsSet(OSSConfKeyAws) {
if err := viper.UnmarshalKey(OSSConfKeyAws, &awsConf); err != nil {
logrus.Error(awsPrefix, "初始化亚马逊OSS错误, ", err)
} else {
logrus.Info(awsPrefix, "初始化亚马逊OSS成功")
}
} else {
logrus.Info(awsPrefix, "未配置亚马逊OSS")
}
}
// 初始化AWS客户端
func initAwsClient(conf AwsConf) {
sess := session.Must(session.NewSession(&aws.Config{
Endpoint: aws.String(conf.EndPoint),
Region: aws.String(conf.Region),
Credentials: credentials.NewStaticCredentials(conf.AccessKeyId, conf.AccessKeySecret, ""),
}))
// Create an uploader with S3 client and default options
uploader = s3manager.NewUploaderWithClient(s3.New(sess))
}
// 上传文件流
func UploadToAws(fileName string, r io.Reader) (string, error) {
prefix := "【上传文件至亚马逊】"
if uploader == nil {
return "", errors.New(prefix + "亚马逊会话对象为空,无法上传")
}
// 上传路径
fiePath := awsConf.UploadPath + "/" + fileName
// 上传文件
result, err := uploader.Upload(&s3manager.UploadInput{
Bucket: aws.String(awsConf.BucketName),
Key: aws.String(fiePath),
Body: r,
ACL: aws.String("public-read"),
})
if err != nil {
logrus.Error("上传文件失败, ", err)
return "", err
}
logrus.Info("上传文件成功, ", convert.ObjToJson(result))
fileUrl := result.Location
// fileUrl := awsConf.Domain + "/" + fiePath
logrus.Info("文件上传成功, 文件地址:", result.Location)
return fileUrl, nil
}