minio.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460
  1. package services
  2. import (
  3. "context"
  4. "errors"
  5. "eta_gn/eta_api/utils"
  6. "fmt"
  7. "github.com/minio/minio-go/v7"
  8. "github.com/minio/minio-go/v7/pkg/credentials"
  9. "time"
  10. )
  11. //func GetMinIOSTSToken() (item *Token, err error) {
  12. // // MinIO服务的访问信息
  13. // item = new(Token)
  14. // //useSSL := false
  15. // //if utils.MinIoUseSSL == "true" {
  16. // // useSSL = true
  17. // //}
  18. // // 创建MinIO客户端
  19. // //minioClient, err := minio.New(utils.MinIoEndpoint, &minio.Options{
  20. // // Creds: credentials.NewStaticV4(utils.MinIoAccessKeyId, utils.MinIoAccessKeySecret, ""),
  21. // // Secure: useSSL,
  22. // //})
  23. // //if err != nil {
  24. // // return nil, err
  25. // //}
  26. // // 设置STS凭证请求参数
  27. // //policy := `{
  28. // // "Version": "2012-10-17",
  29. // // "Statement": [
  30. // // {
  31. // // "Sid": "",
  32. // // "Effect": "Allow",
  33. // // "Principal": {"AWS": "arn:aws:iam::1234567890:root"},
  34. // // "Action": "s3:GetObject",
  35. // // "Resource": "arn:aws:s3:::<YourBucketName>/*"
  36. // // }
  37. // // ]
  38. // //}`
  39. // //expiry := time.Hour * 24 // STS凭证的过期时间
  40. // //获取STS凭证
  41. // //stsCredentials, err := minioClient.PresignedPutObject(context.Background(), "etastatic", "myobject", expiry)
  42. // //if err != nil {
  43. // // return
  44. // //}
  45. // item.AccessKeyId = utils.MinIoAccessKeyId
  46. // item.SecretKeyId = utils.MinIoAccessKeySecret
  47. // item.Endpoint = utils.MinIoEndpoint
  48. // item.ImgHost = utils.MinIoImghost
  49. // item.Bucketname = utils.MinIoBucketname
  50. // item.UseSSL = utils.MinIoUseSSL
  51. // item.RegionId = utils.MinIoRegion
  52. // item.Port = utils.MinIoPort
  53. // return
  54. //}
  55. //type Token struct {
  56. // AccessKeyId string
  57. // SecretKeyId string
  58. // RegionId string
  59. // Bucketname string
  60. // Endpoint string
  61. // ImgHost string
  62. // UseSSL string
  63. // Port string
  64. //}
  65. //func UploadMinIo() {
  66. // ctx := context.Background()
  67. // endpoint := "8.136.199.33:9000/"
  68. // accessKeyID := "LfQ8uiJiLP7vLxjRrmNW"
  69. // secretAccessKey := "IszGVHsNicJMQxHC46cYFtbrOiapo0ynwOIJ6c2R"
  70. // useSSL := false
  71. //
  72. // // Initialize minio client object.
  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. // }
  80. //
  81. // // Make a new bucket called mymusic.
  82. // bucketName := "etastatic"
  83. // location := "/"
  84. //
  85. // err = minioClient.MakeBucket(ctx, bucketName, minio.MakeBucketOptions{Region: location})
  86. // if err != nil {
  87. // // Check to see if we already own this bucket (which happens if you run this twice)
  88. // exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
  89. // if errBucketExists == nil && exists {
  90. // log.Printf("We already own %s\n", bucketName)
  91. // } else {
  92. // utils.FileLog.Error(err.Error())
  93. // }
  94. // } else {
  95. // log.Printf("Successfully created %s\n", bucketName)
  96. // }
  97. // //buckets, err := minioClient.ListBuckets(ctx)
  98. // //for _, bucket := range buckets {
  99. // // fmt.Println(bucket)
  100. // //}
  101. // // Upload the zip file
  102. // objectName := "1111.xlsx"
  103. // filePath := "/Users/xi/Desktop/1111.xlsx"
  104. // contentType := "application/xlsx"
  105. //
  106. // // Upload the zip file with FPutObject
  107. // info, err := minioClient.FPutObject(ctx, bucketName, objectName, filePath, minio.PutObjectOptions{ContentType: contentType})
  108. // if err != nil {
  109. // utils.FileLog.Error(err.Error())
  110. // }
  111. //
  112. // log.Printf("Successfully uploaded %s of size %d\n", objectName, info.Size)
  113. //}
  114. // UploadImgToMinIo 图片上传
  115. //func UploadImgToMinIo(fileName, filePath string) (string, error) {
  116. // if utils.MinIoAccessKeyId == `` || utils.MinIoAccessKeySecret == `` {
  117. // return "0", errors.New("MinIo信息未配置")
  118. // }
  119. //
  120. // ctx := context.Background()
  121. // endpoint := utils.MinIoEndpoint
  122. // accessKeyID := utils.MinIoAccessKeyId
  123. // secretAccessKey := utils.MinIoAccessKeySecret
  124. // useSSL := false
  125. // if utils.MinIoUseSSL == "true" {
  126. // useSSL = true
  127. // }
  128. // minioClient, err := minio.New(endpoint, &minio.Options{
  129. // Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
  130. // Secure: useSSL,
  131. // })
  132. // if err != nil {
  133. // utils.FileLog.Error(err.Error())
  134. // return "1", err
  135. // }
  136. // bucketName := utils.MinIoBucketname
  137. // // Check to see if we already own this bucket (which happens if you run this twice)
  138. // exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
  139. // if errBucketExists == nil && exists {
  140. // log.Printf("We already own %s\n", bucketName)
  141. // } else {
  142. // utils.FileLog.Error(err.Error())
  143. // return "2", err
  144. // }
  145. // path := utils.MinIoUploadDir + time.Now().Format("200601/20060102/")
  146. // path += fileName
  147. // // Upload the zip file with FPutObject
  148. // //contentType := "application/xlsx"
  149. // _, err = minioClient.FPutObject(ctx, bucketName, path, filePath, minio.PutObjectOptions{})
  150. // if err != nil {
  151. // utils.FileLog.Error(err.Error())
  152. // return "3", err
  153. // }
  154. //
  155. // path = utils.MinIoImghost + path
  156. // return path, err
  157. //}
  158. // UploadAudioToMinIo 音频上传
  159. //func UploadAudioToMinIo(fileName, filePath string) (string, error) {
  160. // if utils.MinIoAccessKeyId == `` || utils.MinIoAccessKeySecret == `` {
  161. // return "0", errors.New("MinIo信息未配置")
  162. // }
  163. //
  164. // ctx := context.Background()
  165. // endpoint := utils.MinIoEndpoint
  166. // accessKeyID := utils.MinIoAccessKeyId
  167. // secretAccessKey := utils.MinIoAccessKeySecret
  168. // useSSL := false
  169. // if utils.MinIoUseSSL == "true" {
  170. // useSSL = true
  171. // }
  172. // minioClient, err := minio.New(endpoint, &minio.Options{
  173. // Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
  174. // Secure: useSSL,
  175. // })
  176. // if err != nil {
  177. // utils.FileLog.Error(err.Error())
  178. // return "1", err
  179. // }
  180. // bucketName := utils.MinIoBucketname
  181. // // Check to see if we already own this bucket (which happens if you run this twice)
  182. // exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
  183. // if errBucketExists == nil && exists {
  184. // log.Printf("We already own %s\n", bucketName)
  185. // } else {
  186. // utils.FileLog.Error(err.Error())
  187. // return "2", err
  188. // }
  189. //
  190. // path := utils.MinIoUpload_Audio_Dir + time.Now().Format("200601/20060102/")
  191. // path += fileName
  192. //
  193. // // Upload the zip file with FPutObject
  194. // //contentType := "application/xlsx"
  195. // _, err = minioClient.FPutObject(ctx, bucketName, path, filePath, minio.PutObjectOptions{})
  196. // if err != nil {
  197. // utils.FileLog.Error(err.Error())
  198. // return "3", err
  199. // }
  200. //
  201. // path = utils.MinIoImghost + path
  202. // return path, err
  203. //}
  204. // UploadVideoToMinIo 视频上传
  205. //func UploadVideoToMinIo(filename, filePath, savePath string) error {
  206. // if utils.MinIoAccessKeyId == `` || utils.MinIoAccessKeySecret == `` {
  207. // return errors.New("MinIo信息未配置")
  208. // }
  209. // defer func() {
  210. // os.Remove(filePath)
  211. // }()
  212. //
  213. // ctx := context.Background()
  214. // endpoint := utils.MinIoEndpoint
  215. // accessKeyID := utils.MinIoAccessKeyId
  216. // secretAccessKey := utils.MinIoAccessKeySecret
  217. // useSSL := false
  218. // if utils.MinIoUseSSL == "true" {
  219. // useSSL = true
  220. // }
  221. // minioClient, err := minio.New(endpoint, &minio.Options{
  222. // Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
  223. // Secure: useSSL,
  224. // })
  225. // if err != nil {
  226. // utils.FileLog.Error(err.Error())
  227. // return err
  228. // }
  229. // bucketName := utils.MinIoBucketname
  230. // // Check to see if we already own this bucket (which happens if you run this twice)
  231. // exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
  232. // if errBucketExists == nil && exists {
  233. // log.Printf("We already own %s\n", bucketName)
  234. // } else {
  235. // utils.FileLog.Error(err.Error())
  236. // return err
  237. // }
  238. //
  239. // //path := utils.Upload_Audio_Dir + time.Now().Format("200601/20060102/")
  240. // //path += filename
  241. // _, err = minioClient.FPutObject(ctx, bucketName, savePath, filePath, minio.PutObjectOptions{})
  242. // if err != nil {
  243. // utils.FileLog.Error(err.Error())
  244. // return err
  245. // }
  246. // //path = utils.Imghost + path
  247. // //return path,err
  248. // return err
  249. //}
  250. // UploadFileToMinIo 上传文件
  251. //func UploadFileToMinIo(filename, filePath, savePath string) error {
  252. // if utils.MinIoAccessKeyId == `` || utils.MinIoAccessKeySecret == `` {
  253. // return errors.New("MinIo信息未配置")
  254. // }
  255. // defer func() {
  256. // os.Remove(filePath)
  257. // }()
  258. // ctx := context.Background()
  259. // endpoint := utils.MinIoEndpoint
  260. // accessKeyID := utils.MinIoAccessKeyId
  261. // secretAccessKey := utils.MinIoAccessKeySecret
  262. // useSSL := false
  263. // if utils.MinIoUseSSL == "true" {
  264. // useSSL = true
  265. // }
  266. // minioClient, err := minio.New(endpoint, &minio.Options{
  267. // Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
  268. // Secure: useSSL,
  269. // })
  270. // if err != nil {
  271. // utils.FileLog.Error(err.Error())
  272. // return err
  273. // }
  274. // bucketName := utils.MinIoBucketname
  275. // // Check to see if we already own this bucket (which happens if you run this twice)
  276. // exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
  277. // if errBucketExists == nil && exists {
  278. // log.Printf("We already own %s\n", bucketName)
  279. // } else {
  280. // utils.FileLog.Error(err.Error())
  281. // return err
  282. // }
  283. // //path := utils.Upload_Audio_Dir + time.Now().Format("200601/20060102/")
  284. // //path += filename
  285. // _, err = minioClient.FPutObject(ctx, bucketName, savePath, filePath, minio.PutObjectOptions{})
  286. // if err != nil {
  287. // utils.FileLog.Error(err.Error())
  288. // return err
  289. // }
  290. // //path = utils.Imghost + path
  291. // //return path,err
  292. // return err
  293. //}
  294. // UploadMinIoToDir 上传至hzchart
  295. //func UploadMinIoToDir(filename, filePath, uploadDir, fileDir string) (string, error) {
  296. // if utils.MinIoAccessKeyId == `` || utils.MinIoAccessKeySecret == `` {
  297. // return "0", errors.New("MinIo信息未配置")
  298. // }
  299. // ctx := context.Background()
  300. // endpoint := utils.MinIoEndpoint
  301. // accessKeyID := utils.MinIoAccessKeyId
  302. // secretAccessKey := utils.MinIoAccessKeySecret
  303. // useSSL := false
  304. // if utils.MinIoUseSSL == "true" {
  305. // useSSL = true
  306. // }
  307. // minioClient, err := minio.New(endpoint, &minio.Options{
  308. // Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
  309. // Secure: useSSL,
  310. // })
  311. // if err != nil {
  312. // utils.FileLog.Error(err.Error())
  313. // return "1", err
  314. // }
  315. // bucketName := utils.MinIoBucketname
  316. // // Check to see if we already own this bucket (which happens if you run this twice)
  317. // exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
  318. // if errBucketExists == nil && exists {
  319. // log.Printf("We already own %s\n", bucketName)
  320. // } else {
  321. // utils.FileLog.Error(err.Error())
  322. // return "2", err
  323. // }
  324. // if uploadDir == "" {
  325. // uploadDir = utils.MinIoUploadDir
  326. // }
  327. // if fileDir == "" {
  328. // fileDir = time.Now().Format("200601/20060102/")
  329. // }
  330. // path := uploadDir + fileDir
  331. // path += filename
  332. // _, err = minioClient.FPutObject(ctx, bucketName, path, filePath, minio.PutObjectOptions{})
  333. // if err != nil {
  334. // utils.FileLog.Error(err.Error())
  335. // return "3", err
  336. // }
  337. // path = utils.MinIoImghost + path
  338. // return path, err
  339. //}
  340. //func UploadImgToMinIoTest(fileName, filePath string) (string, error) {
  341. // ctx := context.Background()
  342. // endpoint := utils.Endpoint
  343. // accessKeyID := utils.AccessKeyId
  344. // secretAccessKey := utils.AccessKeySecret
  345. // useSSL := false
  346. // if utils.MinIoUseSSL == "true" {
  347. // useSSL = true
  348. // }
  349. // minioClient, err := minio.New(endpoint, &minio.Options{
  350. // Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
  351. // Secure: useSSL,
  352. // })
  353. // if err != nil {
  354. // utils.FileLog.Error(err.Error())
  355. // return "1", err
  356. // }
  357. // bucketName := utils.Bucketname
  358. // // Check to see if we already own this bucket (which happens if you run this twice)
  359. //
  360. // buckets, e := minioClient.ListBuckets(ctx)
  361. // if e != nil {
  362. // fmt.Println("ListBuckets: ", e.Error())
  363. // return "", e
  364. // }
  365. // for k := range buckets {
  366. // fmt.Println(k)
  367. // }
  368. //
  369. // exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
  370. // fmt.Println("exists: ", exists)
  371. // fmt.Println("errBucketExists: ", errBucketExists)
  372. // if errBucketExists == nil && exists {
  373. // log.Printf("We already own %s\n", bucketName)
  374. // } else {
  375. // utils.FileLog.Error(err.Error())
  376. // return "2", err
  377. // }
  378. // path := utils.UploadDir + time.Now().Format("200601/20060102/")
  379. // path += fileName
  380. // // Upload the zip file with FPutObject
  381. // //contentType := "application/xlsx"
  382. // _, err = minioClient.FPutObject(ctx, bucketName, path, filePath, minio.PutObjectOptions{})
  383. // if err != nil {
  384. // utils.FileLog.Error(err.Error())
  385. // return "3", err
  386. // }
  387. //
  388. // path = utils.Imghost + path
  389. // return path, err
  390. //}
  391. type MinioOss struct{}
  392. // UploadFile 上传文件
  393. func (m *MinioOss) UploadFile(fileName, filePath, savePath string) (string, error) {
  394. if utils.MinIoAccessKeyId == `` || utils.MinIoAccessKeySecret == `` {
  395. return "0", errors.New("MinIo信息未配置")
  396. }
  397. ctx := context.Background()
  398. // 此处兼容一下前后端endpoint不一致的情况, 前端用minio_endpoint后端用minio_back_endpoint, minio_back_endpoint为空则都取前者
  399. endpoint := utils.MinIoEndpoint
  400. if utils.MinIoBackEndpoint != "" {
  401. endpoint = utils.MinIoBackEndpoint
  402. }
  403. accessKeyID := utils.MinIoAccessKeyId
  404. secretAccessKey := utils.MinIoAccessKeySecret
  405. useSSL := false
  406. if utils.MinIoUseSSL == "true" {
  407. useSSL = true
  408. }
  409. minioClient, err := minio.New(endpoint, &minio.Options{
  410. Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
  411. Secure: useSSL,
  412. })
  413. if err != nil {
  414. utils.FileLog.Error(err.Error())
  415. return "1", err
  416. }
  417. bucketName := utils.MinIoBucketname
  418. exists, errBucketExists := minioClient.BucketExists(ctx, bucketName)
  419. if errBucketExists != nil || !exists {
  420. err = fmt.Errorf("BucketExists: %v; err: %v", exists, errBucketExists)
  421. return "2", err
  422. }
  423. path := savePath
  424. if savePath == "" {
  425. path = utils.MinIoUploadDir + time.Now().Format("200601/20060102/") + fileName
  426. }
  427. _, err = minioClient.FPutObject(ctx, bucketName, path, filePath, minio.PutObjectOptions{})
  428. if err != nil {
  429. utils.FileLog.Error(err.Error())
  430. return "3", err
  431. }
  432. resourceUrl := utils.MinIoImghost + path
  433. return resourceUrl, err
  434. }
  435. func (m *MinioOss) GetUploadToken() (token OssToken, err error) {
  436. token.AccessKeyId = utils.MinIoAccessKeyId
  437. token.SecretKeyId = utils.MinIoAccessKeySecret
  438. token.Endpoint = utils.MinIoEndpoint
  439. token.ImgHost = utils.MinIoImghost
  440. token.Bucketname = utils.MinIoBucketname
  441. token.UseSSL = utils.MinIoUseSSL
  442. token.RegionId = utils.MinIoRegion
  443. token.Port = utils.MinIoPort
  444. return
  445. }