minio.go 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. package services
  2. import (
  3. "context"
  4. "errors"
  5. "eta/eta_mini_crm_ht/utils"
  6. "fmt"
  7. "github.com/minio/minio-go/v7"
  8. "github.com/minio/minio-go/v7/pkg/credentials"
  9. "time"
  10. )
  11. type MinioOss struct{}
  12. // UploadFile 上传文件
  13. func (m *MinioOss) UploadFile(fileName, filePath, savePath string) (string, error) {
  14. if utils.MinIoAccessKeyId == `` || utils.MinIoAccessKeySecret == `` {
  15. return "0", errors.New("MinIo信息未配置")
  16. }
  17. ctx := context.Background()
  18. // 此处兼容一下前后端endpoint不一致的情况, 前端用minio_endpoint后端用minio_back_endpoint, minio_back_endpoint为空则都取前者
  19. endpoint := utils.MinIoEndpoint
  20. if utils.MinIoBackEndpoint != "" {
  21. endpoint = utils.MinIoBackEndpoint
  22. }
  23. accessKeyID := utils.MinIoAccessKeyId
  24. secretAccessKey := utils.MinIoAccessKeySecret
  25. useSSL := false
  26. if utils.MinIoUseSSL == "true" {
  27. useSSL = true
  28. }
  29. minioClient, err := minio.New(endpoint, &minio.Options{
  30. Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
  31. Secure: useSSL,
  32. })
  33. if err != nil {
  34. utils.FileLog.Error(err.Error())
  35. return "1", err
  36. }
  37. bucketName := utils.MinIoBucketname
  38. exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
  39. if errBucketExists != nil || !exists {
  40. err = fmt.Errorf("BucketExists: %v; err: %v", exists, errBucketExists)
  41. return "2", err
  42. }
  43. path := savePath
  44. if savePath == "" {
  45. path = utils.MinIoUploadDir + time.Now().Format("200601/20060102/") + fileName
  46. }
  47. _, err = minioClient.FPutObject(ctx, bucketName, path, filePath, minio.PutObjectOptions{})
  48. if err != nil {
  49. utils.FileLog.Error(err.Error())
  50. return "3", err
  51. }
  52. resourceUrl := utils.MinIoPdfhost + path
  53. return resourceUrl, err
  54. }
  55. func (m *MinioOss) GetExt(string) (ext string, err error) {
  56. if utils.MinIoAccessKeyId == `` || utils.MinIoAccessKeySecret == `` {
  57. err = errors.New("MinIo信息未配置")
  58. return
  59. }
  60. ctx := context.Background()
  61. // 此处兼容一下前后端endpoint不一致的情况, 前端用minio_endpoint后端用minio_back_endpoint, minio_back_endpoint为空则都取前者
  62. endpoint := utils.MinIoEndpoint
  63. if utils.MinIoBackEndpoint != "" {
  64. endpoint = utils.MinIoBackEndpoint
  65. }
  66. accessKeyID := utils.MinIoAccessKeyId
  67. secretAccessKey := utils.MinIoAccessKeySecret
  68. useSSL := false
  69. if utils.MinIoUseSSL == "true" {
  70. useSSL = true
  71. }
  72. minioClient, err := minio.New(endpoint, &minio.Options{
  73. Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
  74. Secure: useSSL,
  75. })
  76. if err != nil {
  77. utils.FileLog.Error(err.Error())
  78. return
  79. }
  80. bucketName := utils.MinIoBucketname
  81. exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
  82. if errBucketExists != nil || !exists {
  83. err = fmt.Errorf("BucketExists: %v; err: %v", exists, errBucketExists)
  84. return
  85. }
  86. info, minioErr := minioClient.StatObject(ctx, bucketName, "test.txt", minio.GetObjectOptions{})
  87. if minioErr != nil {
  88. err = fmt.Errorf("StatObject: %v; err: %v", info, minioErr)
  89. return
  90. }
  91. ext = GetFileExtensionFromContentType(info.ContentType)
  92. return
  93. }
  94. func (m *MinioOss) GetUploadToken() (token OssToken, err error) {
  95. token.AccessKeyId = utils.MinIoAccessKeyId
  96. token.SecretKeyId = utils.MinIoAccessKeySecret
  97. token.Endpoint = utils.MinIoEndpoint
  98. token.ImgHost = utils.MinIoPdfhost
  99. token.Bucketname = utils.MinIoBucketname
  100. token.UseSSL = utils.MinIoUseSSL
  101. token.RegionId = utils.MinIoRegion
  102. token.Port = utils.MinIoPort
  103. return
  104. }
  105. func (m *MinioOss) GetFile(filePath, savePath string) (path string, err error) {
  106. if utils.MinIoAccessKeyId == `` || utils.MinIoAccessKeySecret == `` {
  107. err = errors.New("MinIo信息未配置")
  108. return
  109. }
  110. ctx := context.Background()
  111. // 此处兼容一下前后端endpoint不一致的情况, 前端用minio_endpoint后端用minio_back_endpoint, minio_back_endpoint为空则都取前者
  112. endpoint := utils.MinIoEndpoint
  113. if utils.MinIoBackEndpoint != "" {
  114. endpoint = utils.MinIoBackEndpoint
  115. }
  116. accessKeyID := utils.MinIoAccessKeyId
  117. secretAccessKey := utils.MinIoAccessKeySecret
  118. useSSL := false
  119. if utils.MinIoUseSSL == "true" {
  120. useSSL = true
  121. }
  122. minioClient, err := minio.New(endpoint, &minio.Options{
  123. Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
  124. Secure: useSSL,
  125. })
  126. if err != nil {
  127. utils.FileLog.Error(err.Error())
  128. return
  129. }
  130. bucketName := utils.MinIoBucketname
  131. exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
  132. if errBucketExists != nil || !exists {
  133. err = fmt.Errorf("BucketExists: %v; err: %v", exists, errBucketExists)
  134. utils.FileLog.Error(err.Error())
  135. return
  136. }
  137. ext, err := m.GetExt(filePath)
  138. if err != nil {
  139. err = fmt.Errorf("GetExt: %v; err: %v", ext, err)
  140. utils.FileLog.Error(err.Error())
  141. return
  142. }
  143. path = savePath + ext
  144. err = minioClient.FGetObject(ctx, bucketName, filePath, path, minio.GetObjectOptions{})
  145. if err != nil {
  146. utils.FileLog.Error(err.Error())
  147. return
  148. }
  149. return
  150. }
  151. func (m *MinioOss) MultiUploadFile() (err error) {
  152. if utils.MinIoAccessKeyId == `` || utils.MinIoAccessKeySecret == `` {
  153. err = errors.New("MinIo信息未配置")
  154. return
  155. }
  156. ctx := context.Background()
  157. // 此处兼容一下前后端endpoint不一致的情况, 前端用minio_endpoint后端用minio_back_endpoint, minio_back_endpoint为空则都取前者
  158. endpoint := utils.MinIoEndpoint
  159. if utils.MinIoBackEndpoint != "" {
  160. endpoint = utils.MinIoBackEndpoint
  161. }
  162. accessKeyID := utils.MinIoAccessKeyId
  163. secretAccessKey := utils.MinIoAccessKeySecret
  164. useSSL := false
  165. if utils.MinIoUseSSL == "true" {
  166. useSSL = true
  167. }
  168. minioClient, err := minio.New(endpoint, &minio.Options{
  169. Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
  170. Secure: useSSL,
  171. })
  172. if err != nil {
  173. utils.FileLog.Error(err.Error())
  174. return
  175. }
  176. bucketName := utils.MinIoBucketname
  177. exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
  178. if errBucketExists != nil || !exists {
  179. err = fmt.Errorf("BucketExists: %v; err: %v", exists, errBucketExists)
  180. return
  181. }
  182. return
  183. }