You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
2.9 KiB

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