s3_config.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package entity
  2. import (
  3. "backup-x/util"
  4. "errors"
  5. "log"
  6. "os"
  7. "github.com/aws/aws-sdk-go/aws"
  8. "github.com/aws/aws-sdk-go/aws/credentials"
  9. "github.com/aws/aws-sdk-go/aws/session"
  10. "github.com/aws/aws-sdk-go/service/s3"
  11. "github.com/aws/aws-sdk-go/service/s3/s3manager"
  12. )
  13. // S3Config S3Config
  14. type S3Config struct {
  15. Endpoint string
  16. AccessKey string
  17. SecretKey string
  18. BucketName string
  19. }
  20. func (s3Config S3Config) checkNotEmpty() bool {
  21. return s3Config.Endpoint != "" && s3Config.AccessKey != "" &&
  22. s3Config.SecretKey != "" && s3Config.BucketName != ""
  23. }
  24. func (s3Config S3Config) getSession() (*session.Session, error) {
  25. if !s3Config.checkNotEmpty() {
  26. return nil, errors.New("s3 config is empty")
  27. }
  28. conf, err := GetConfigCache()
  29. if err != nil {
  30. return nil, err
  31. }
  32. secretKey, err := util.DecryptByEncryptKey(conf.EncryptKey, s3Config.SecretKey)
  33. if err != nil {
  34. return nil, err
  35. }
  36. creds := credentials.NewStaticCredentials(s3Config.AccessKey, secretKey, "")
  37. _, err = creds.Get()
  38. if err != nil {
  39. log.Println(err)
  40. }
  41. config := &aws.Config{
  42. Region: aws.String("cn-north-1"),
  43. Endpoint: aws.String(s3Config.Endpoint),
  44. DisableSSL: aws.Bool(false),
  45. Credentials: creds,
  46. S3ForcePathStyle: aws.Bool(true),
  47. }
  48. mySession, err := session.NewSession(config)
  49. return mySession, err
  50. }
  51. func (s3Config S3Config) CreateBucketIfNotExist() {
  52. mySession, err := s3Config.getSession()
  53. if err != nil {
  54. return
  55. }
  56. client := s3.New(mySession)
  57. head := &s3.HeadBucketInput{
  58. Bucket: aws.String(s3Config.BucketName),
  59. }
  60. _, err = client.HeadBucket(head)
  61. if err != nil {
  62. create := &s3.CreateBucketInput{
  63. Bucket: aws.String(s3Config.BucketName),
  64. }
  65. _, err = client.CreateBucket(create)
  66. if err != nil {
  67. log.Printf("创建bucket: %s 失败, ERR: %s\n", s3Config.BucketName, err)
  68. } else {
  69. log.Printf("创建bucket: %s 成功\n", s3Config.BucketName)
  70. }
  71. }
  72. }
  73. func (s3Config S3Config) UploadFile(fileName string) {
  74. mySession, err := s3Config.getSession()
  75. if err != nil {
  76. log.Printf("创建对象存储会话失败, ERR: %s\n", err)
  77. return
  78. }
  79. file, err := os.Open(fileName)
  80. if err != nil {
  81. log.Println(err)
  82. return
  83. }
  84. defer file.Close()
  85. uploader := s3manager.NewUploader(mySession)
  86. _, err = uploader.Upload(&s3manager.UploadInput{
  87. Bucket: aws.String(s3Config.BucketName),
  88. Key: aws.String(fileName),
  89. Body: file,
  90. })
  91. if err != nil {
  92. log.Printf("%s 上传到对象存储失败. ERR: %s \n", fileName, err)
  93. } else {
  94. log.Printf("%s 上传到对象存储成功\n", fileName)
  95. }
  96. }