s3_config.go 2.3 KB

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