file_qiniu.go 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. package fileManager
  2. import (
  3. "errors"
  4. "fmt"
  5. "github.com/qiniu/api.v7/v7/auth/qbox"
  6. "github.com/qiniu/api.v7/v7/storage"
  7. "gorm.io/gorm"
  8. "log-server/global"
  9. "log-server/model/fileManager"
  10. "log-server/model/fileManager/request"
  11. "log-server/model/fileManager/response"
  12. "strings"
  13. "time"
  14. )
  15. type ServiceFileQiniu struct {
  16. }
  17. // 公司七牛信息
  18. const accessKey = "B81Gsvry2StqKVE3txS-7v9GBBfqykC9zhebmxnW" //七牛云ak,sk,bucket
  19. const secretKey = "YEZJuYcdeF7vRvzffxpopAVR-jMPZg9pZ-4IKTVW"
  20. const bucket0 = "pinaishop"
  21. const CName = "http://cdn.pinaishop.kfzs.com/" //七牛云外链
  22. // QueryVersionByType 查询某一类文件最新的版本号
  23. func (s *ServiceFileQiniu) QueryVersionByType(req request.FileQiniuRequest) (int64, error) {
  24. file := fileManager.FileQiniu{}
  25. if errors.Is(global.GVA_DB.Model(&fileManager.FileQiniu{}).Where("task_id = ? and file_type = ?", req.TaskId, req.FileType).Order("file_version desc").First(&file).Error, gorm.ErrRecordNotFound) {
  26. return 0, nil
  27. }
  28. return file.FileVersion, nil
  29. }
  30. // AddQiniuFile 新增文件
  31. func (s *ServiceFileQiniu) AddQiniuFile(requestCoding request.FileQiniuRequest) (err error) {
  32. //查询真实的父文件夹ID
  33. parentFolder := fileManager.FileFolder{}
  34. if errors.Is(global.GVA_DB.Where("task_id = ? and name = ?", requestCoding.TaskId, requestCoding.FileTypeName).First(&parentFolder).Error, gorm.ErrRecordNotFound) {
  35. return errors.New("父文件夹不存在")
  36. }
  37. //==================================
  38. if !errors.Is(global.GVA_DB.Where("parent_id = ? and file_name = ?", requestCoding.ParentId, requestCoding.FileName).First(&fileManager.FileQiniu{}).Error, gorm.ErrRecordNotFound) {
  39. return errors.New("该目录下已存在同名文件")
  40. }
  41. file := new(fileManager.FileQiniu)
  42. file.ParentId = parentFolder.Id
  43. file.TaskId = requestCoding.TaskId
  44. file.FileName = requestCoding.FileName
  45. file.FileVersion = requestCoding.FileVersion
  46. file.QiniuAddress = requestCoding.QiniuAddress
  47. file.QiniuKey = requestCoding.QiniuKey
  48. file.QiniuHash = requestCoding.QiniuHash
  49. file.FileType = requestCoding.FileType
  50. file.CreateTime = time.Now().Format("2006-01-02 15:04:05")
  51. file.UpdateTime = time.Now().Format("2006-01-02 15:04:05")
  52. return global.GVA_DB.Create(&file).Error
  53. }
  54. // QueryFilesByParentId 查询当前目录下的文件
  55. func (s *ServiceFileQiniu) QueryFilesByParentId(parentId int) (interface{}, error) {
  56. db := global.GVA_DB.Model(&fileManager.FileQiniu{})
  57. db = db.Where("parent_id = ?", parentId)
  58. var fileList []*response.FileQiniuResponse
  59. err := db.Order("create_time desc").Find(&fileList).Error
  60. if err != nil {
  61. return nil, err
  62. }
  63. return fileList, err
  64. }
  65. // GetQiniuToken 获取七牛上传token
  66. func (s *ServiceFileQiniu) GetQiniuToken() interface{} {
  67. putPolicy := storage.PutPolicy{
  68. Scope: bucket0,
  69. ReturnBody: `{"key":"$(key)","hash":"$(etag)","fsize":$(fsize),"bucket":"$(bucket)","name":"$(x:name)"}`,
  70. }
  71. putPolicy.Expires = 3600 * 5 //设置有效期时长为5小时
  72. mac := qbox.NewMac(accessKey, secretKey)
  73. uploadToken := putPolicy.UploadToken(mac)
  74. date := map[string]string{
  75. "token": uploadToken,
  76. "cName": CName,
  77. }
  78. return date
  79. }
  80. // DeleteQiniuFile 删除单个文件
  81. func (s *ServiceFileQiniu) DeleteQiniuFile(requestCoding request.FileQiniuRequest) (err error) {
  82. mac := qbox.NewMac(accessKey, secretKey)
  83. cfg := storage.Config{
  84. // 是否使用https域名进行资源管理
  85. UseHTTPS: true,
  86. }
  87. // 指定空间所在的区域,如果不指定将自动探测
  88. // 如果没有特殊需求,默认不需要指定
  89. //cfg.Region=&storage.ZoneHuabei
  90. bucketManager := storage.NewBucketManager(mac, &cfg)
  91. bucket := bucket0
  92. key := requestCoding.QiniuKey
  93. //
  94. err = bucketManager.Delete(bucket, key)
  95. if err != nil {
  96. fmt.Println(err)
  97. return err
  98. }
  99. return err
  100. }
  101. // DeleteQiniuFileAndRecord 从七牛云删除文件并且清除数据库记录
  102. func (s *ServiceFileQiniu) DeleteQiniuFileAndRecord(requestCoding request.FileQiniuRequest) (err error) {
  103. mac := qbox.NewMac(accessKey, secretKey)
  104. cfg := storage.Config{
  105. // 是否使用https域名进行资源管理
  106. UseHTTPS: true,
  107. }
  108. // 指定空间所在的区域,如果不指定将自动探测
  109. // 如果没有特殊需求,默认不需要指定
  110. //cfg.Region=&storage.ZoneHuabei
  111. bucketManager := storage.NewBucketManager(mac, &cfg)
  112. bucket := bucket0
  113. key := requestCoding.QiniuKey
  114. //
  115. err = bucketManager.Delete(bucket, key)
  116. if err != nil {
  117. fmt.Println(err)
  118. return err
  119. }
  120. err = global.GVA_DB.Delete(&fileManager.FileQiniu{}, "id = ?", requestCoding.Id).Error
  121. return err
  122. }
  123. // RenameQiniuFileAndRecord 重命名七牛云文件和数据库记录
  124. func (s *ServiceFileQiniu) RenameQiniuFileAndRecord(requestCoding request.FileQiniuRequest) (err error) {
  125. file := fileManager.FileQiniu{}
  126. if errors.Is(global.GVA_DB.Where("id = ?", requestCoding.Id).First(&file).Error, gorm.ErrRecordNotFound) {
  127. return errors.New("数据库中未找到该记录")
  128. }
  129. mac := qbox.NewMac(accessKey, secretKey)
  130. cfg := storage.Config{
  131. // 是否使用https域名进行资源管理
  132. UseHTTPS: true,
  133. }
  134. bucketManager := storage.NewBucketManager(mac, &cfg)
  135. bucket := bucket0
  136. srcKey := requestCoding.QiniuKey
  137. //处理字段
  138. s2 := file.QiniuKey[0:strings.Index(file.QiniuKey, file.FileName)]
  139. //global.GVA_LOG.Info(s2)
  140. destKey := s2 + requestCoding.FileNameNew
  141. //如果目标文件存在,是否强制覆盖,如果不覆盖,默认返回614 file exists
  142. err = bucketManager.Move(bucket, srcKey, bucket, destKey, false)
  143. if err != nil {
  144. return err
  145. }
  146. s3 := file.QiniuAddress[0:strings.Index(file.QiniuAddress, file.FileName)]
  147. file.QiniuAddress = s3 + requestCoding.FileNameNew
  148. file.FileName = requestCoding.FileNameNew
  149. file.QiniuKey = destKey
  150. err = global.GVA_DB.Save(file).Error
  151. return err
  152. }