exa_file_upload_download.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package service
  2. import (
  3. "errors"
  4. "gin-vue-admin/global"
  5. "gin-vue-admin/model"
  6. "gin-vue-admin/model/request"
  7. "gin-vue-admin/utils"
  8. "mime/multipart"
  9. "os"
  10. "strings"
  11. )
  12. // @title Upload
  13. // @description 创建文件上传记录
  14. // @param file model.ExaFileUploadAndDownload
  15. // @auth (2020/04/05 20:22)
  16. // @return error
  17. func Upload(file model.ExaFileUploadAndDownload) error {
  18. err := global.GVA_DB.Create(&file).Error
  19. return err
  20. }
  21. // @title FindFile
  22. // @description 删除文件切片记录
  23. // @auth (2020/04/05 20:22)
  24. // @param id uint
  25. // @return error
  26. func FindFile(id uint) (error, model.ExaFileUploadAndDownload) {
  27. var file model.ExaFileUploadAndDownload
  28. err := global.GVA_DB.Where("id = ?", id).First(&file).Error
  29. return err, file
  30. }
  31. // @title DeleteFile
  32. // @description 删除文件记录
  33. // @auth (2020/04/05 20:22)
  34. // @param file model.ExaFileUploadAndDownload
  35. // @return error
  36. func DeleteFile(file model.ExaFileUploadAndDownload) (err error) {
  37. var fileFromDb model.ExaFileUploadAndDownload
  38. err, fileFromDb = FindFile(file.ID)
  39. if err != nil {
  40. return errors.New("文件不存在")
  41. }
  42. if global.GVA_CONFIG.LocalUpload.Local { // 删除本地文件
  43. if strings.Contains(fileFromDb.Url, global.GVA_CONFIG.LocalUpload.FilePath) {
  44. if err = os.Remove(fileFromDb.Url); err != nil {
  45. err = errors.New("本地文件删除失败, err:" + err.Error())
  46. }
  47. }
  48. } else {
  49. if err = utils.DeleteFile(file.Key); err != nil { // 删除七牛云文件
  50. err = errors.New("七牛云文件删除失败, err:" + err.Error())
  51. }
  52. }
  53. err = global.GVA_DB.Where("id = ?", file.ID).Unscoped().Delete(file).Error
  54. return err
  55. }
  56. // @title GetFileRecordInfoList
  57. // @description 分页获取数据
  58. // @auth (2020/04/05 20:22)
  59. // @param info PageInfo
  60. // @return err error
  61. // @return list error
  62. // @return total error
  63. func GetFileRecordInfoList(info request.PageInfo) (err error, list interface{}, total int64) {
  64. limit := info.PageSize
  65. offset := info.PageSize * (info.Page - 1)
  66. db := global.GVA_DB
  67. var fileLists []model.ExaFileUploadAndDownload
  68. err = db.Find(&fileLists).Count(&total).Error
  69. err = db.Limit(limit).Offset(offset).Order("updated_at desc").Find(&fileLists).Error
  70. return err, fileLists, total
  71. }
  72. // @title UploadFile
  73. // @description 根据配置文件判断是文件上传到本地或者七牛云
  74. // @auth (2020/04/05 20:22)
  75. // @param header *multipart.FileHeader
  76. // @param noSave string
  77. // @return err error
  78. // @return file file model.ExaFileUploadAndDownload
  79. func UploadFile(header *multipart.FileHeader, noSave string) (err error, file model.ExaFileUploadAndDownload) {
  80. var filePath, key string
  81. var f model.ExaFileUploadAndDownload
  82. if global.GVA_CONFIG.LocalUpload.Local { // 本地上传
  83. err, filePath, key = utils.UploadFileLocal(header)
  84. } else { // 七牛云上传
  85. err, filePath, key = utils.UploadRemote(header)
  86. }
  87. if noSave == "0" {
  88. f.Url = filePath
  89. f.Name = header.Filename
  90. s := strings.Split(f.Name, ".")
  91. f.Tag = s[len(s)-1]
  92. f.Key = key
  93. return Upload(f), f
  94. }
  95. return
  96. }