minio.go 5.9 KB

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