minio.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. package services
  2. import (
  3. "context"
  4. "errors"
  5. "eta_gn/eta_report/utils"
  6. "fmt"
  7. "github.com/minio/minio-go/v7"
  8. "github.com/minio/minio-go/v7/pkg/credentials"
  9. "log"
  10. "os"
  11. "time"
  12. )
  13. // UploadMinIoToDir 上传至hzchart
  14. //func UploadMinIoToDir(filename, filePath, uploadDir, fileDir string) (string, error) {
  15. // if utils.MinIoAccessKeyId == `` || utils.MinIoAccessKeySecret == `` {
  16. // return "0", errors.New("MinIo信息未配置")
  17. // }
  18. // ctx := context.Background()
  19. // endpoint := utils.MinIoEndpoint
  20. // accessKeyID := utils.MinIoAccessKeyId
  21. // secretAccessKey := utils.MinIoAccessKeySecret
  22. // useSSL := false
  23. // if utils.MinIoUseSSL == "true" {
  24. // useSSL = true
  25. // }
  26. // minioClient, err := minio.New(endpoint, &minio.Options{
  27. // Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
  28. // Secure: useSSL,
  29. // })
  30. // if err != nil {
  31. // log.Fatalln(err)
  32. // return "1", err
  33. // }
  34. // bucketName := utils.MinIoBucketname
  35. // // Check to see if we already own this bucket (which happens if you run this twice)
  36. // exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
  37. // if errBucketExists == nil && exists {
  38. // log.Printf("We already own %s\n", bucketName)
  39. // } else {
  40. // log.Fatalln(err)
  41. // return "2", err
  42. // }
  43. // if uploadDir == "" {
  44. // uploadDir = utils.MinIoUploadDir
  45. // }
  46. // if fileDir == "" {
  47. // fileDir = time.Now().Format("200601/20060102/")
  48. // }
  49. // path := uploadDir + fileDir
  50. // path += filename
  51. // _, err = minioClient.FPutObject(ctx, bucketName, path, filePath, minio.PutObjectOptions{})
  52. // if err != nil {
  53. // log.Fatalln(err)
  54. // return "3", err
  55. // }
  56. // path = utils.MinIoImghost + path
  57. // return path, err
  58. //}
  59. type MinioOss struct{}
  60. // UploadFile 上传文件
  61. func (m *MinioOss) UploadFile(fileName, filePath, savePath string) (string, error) {
  62. defer func() {
  63. _ = os.Remove(filePath)
  64. }()
  65. if utils.MinIoAccessKeyId == `` || utils.MinIoAccessKeySecret == `` {
  66. return "0", errors.New("MinIo信息未配置")
  67. }
  68. ctx := context.Background()
  69. // 此处兼容一下前后端endpoint不一致的情况, 前端用minio_endpoint后端用minio_back_endpoint, minio_back_endpoint为空则都取前者
  70. endpoint := utils.MinIoEndpoint
  71. if utils.MinIoBackEndpoint != "" {
  72. endpoint = utils.MinIoBackEndpoint
  73. }
  74. accessKeyID := utils.MinIoAccessKeyId
  75. secretAccessKey := utils.MinIoAccessKeySecret
  76. useSSL := false
  77. if utils.MinIoUseSSL == "true" {
  78. useSSL = true
  79. }
  80. minioClient, err := minio.New(endpoint, &minio.Options{
  81. Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
  82. Secure: useSSL,
  83. })
  84. if err != nil {
  85. log.Fatalln(err)
  86. return "1", err
  87. }
  88. bucketName := utils.MinIoBucketname
  89. exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
  90. if errBucketExists != nil || !exists {
  91. err = fmt.Errorf("BucketExists: %v; err: %v", exists, errBucketExists)
  92. return "2", err
  93. }
  94. path := savePath
  95. if savePath == "" {
  96. path = utils.MinIoUploadDir + time.Now().Format("200601/20060102/") + fileName
  97. }
  98. _, err = minioClient.FPutObject(ctx, bucketName, path, filePath, minio.PutObjectOptions{})
  99. if err != nil {
  100. log.Fatalln(err)
  101. return "3", err
  102. }
  103. resourceUrl := utils.MinIoImghost + path
  104. return resourceUrl, err
  105. }
  106. func (m *MinioOss) GetUploadToken() (token OssToken, err error) {
  107. token.AccessKeyId = utils.MinIoAccessKeyId
  108. token.SecretKeyId = utils.MinIoAccessKeySecret
  109. token.Endpoint = utils.MinIoEndpoint
  110. token.ImgHost = utils.MinIoImghost
  111. token.Bucketname = utils.MinIoBucketname
  112. token.UseSSL = utils.MinIoUseSSL
  113. token.RegionId = utils.MinIoRegion
  114. token.Port = utils.MinIoPort
  115. return
  116. }