diff --git a/server/api/v1/exa_file_upload_download.go b/server/api/v1/exa_file_upload_download.go index 119f264e422d8b7cf81707fde9bf84a0db6cee44..d38ff8d3b3b15da4e6f9293e25c26b4e3721bca2 100644 --- a/server/api/v1/exa_file_upload_download.go +++ b/server/api/v1/exa_file_upload_download.go @@ -2,15 +2,12 @@ package v1 import ( "fmt" - "gin-vue-admin/global" "gin-vue-admin/global/response" "gin-vue-admin/model" "gin-vue-admin/model/request" resp "gin-vue-admin/model/response" "gin-vue-admin/service" - "gin-vue-admin/utils" "github.com/gin-gonic/gin" - "strings" ) // @Tags ExaFileUploadAndDownload @@ -22,42 +19,19 @@ import ( // @Success 200 {string} string "{"success":true,"data":{},"msg":"上传成功"}" // @Router /fileUploadAndDownload/upload [post] func UploadFile(c *gin.Context) { + var file model.ExaFileUploadAndDownload noSave := c.DefaultQuery("noSave", "0") _, header, err := c.Request.FormFile("file") if err != nil { response.FailWithMessage(fmt.Sprintf("上传文件失败,%v", err), c) - } else { - // 文件上传后拿到文件路径 - var uploadErr error - var filePath string - var key string - if global.GVA_CONFIG.LocalUpload.Local { - // 本地上传 - uploadErr, filePath, key = utils.UploadFileLocal(header) - } else { - // 七牛云上传 - uploadErr, filePath, key = utils.UploadRemote(header) - } - if uploadErr != nil { - response.FailWithMessage(fmt.Sprintf("接收返回值失败,%v", err), c) - } else { - // 修改数据库后得到修改后的user并且返回供前端使用 - var file model.ExaFileUploadAndDownload - file.Url = filePath - file.Name = header.Filename - s := strings.Split(file.Name, ".") - file.Tag = s[len(s)-1] - file.Key = key - if noSave == "0" { - err = service.Upload(file) - } - if err != nil { - response.FailWithMessage(fmt.Sprintf("修改数据库链接失败,%v", err), c) - } else { - response.OkDetailed(resp.ExaFileResponse{File: file}, "上传成功", c) - } - } + return + } + err, file = service.UploadFile(header, noSave) // 文件上传后拿到文件路径 + if err != nil { + response.FailWithMessage(fmt.Sprintf("修改数据库链接失败,%v", err), c) + return } + response.OkDetailed(resp.ExaFileResponse{File: file}, "上传成功", c) } // @Tags ExaFileUploadAndDownload @@ -70,23 +44,11 @@ func UploadFile(c *gin.Context) { func DeleteFile(c *gin.Context) { var file model.ExaFileUploadAndDownload _ = c.ShouldBindJSON(&file) - err, f := service.FindFile(file.ID) - if err != nil { + if err := service.DeleteFile(file); err != nil { response.FailWithMessage(fmt.Sprintf("删除失败,%v", err), c) - } else { - err = utils.DeleteFile(f.Key) - if err != nil { - response.FailWithMessage(fmt.Sprintf("删除失败,%v", err), c) - - } else { - err = service.DeleteFile(f) - if err != nil { - response.FailWithMessage(fmt.Sprintf("删除失败,%v", err), c) - } else { - response.OkWithMessage("删除成功", c) - } - } + return } + response.OkWithMessage("删除成功", c) } // @Tags ExaFileUploadAndDownload diff --git a/server/service/exa_file_upload_download.go b/server/service/exa_file_upload_download.go index 05cb37cbc33bf0c6bad203331ad4294d98c34ac9..a5e969cc42ec6cbf1c0f03883ee00d99d1ae7d77 100644 --- a/server/service/exa_file_upload_download.go +++ b/server/service/exa_file_upload_download.go @@ -1,9 +1,14 @@ package service import ( + "errors" "gin-vue-admin/global" "gin-vue-admin/model" "gin-vue-admin/model/request" + "gin-vue-admin/utils" + "mime/multipart" + "os" + "strings" ) // @title Upload @@ -35,8 +40,24 @@ func FindFile(id uint) (error, model.ExaFileUploadAndDownload) { // @param file model.ExaFileUploadAndDownload // @return error -func DeleteFile(file model.ExaFileUploadAndDownload) error { - err := global.GVA_DB.Where("id = ?", file.ID).Unscoped().Delete(file).Error +func DeleteFile(file model.ExaFileUploadAndDownload) (err error) { + var fileFromDb model.ExaFileUploadAndDownload + err, fileFromDb = FindFile(file.ID) + if err != nil { + return errors.New("文件不存在") + } + if global.GVA_CONFIG.LocalUpload.Local { // 删除本地文件 + if strings.Contains(fileFromDb.Url, global.GVA_CONFIG.LocalUpload.FilePath) { + if err = os.Remove(fileFromDb.Url); err != nil { + err = errors.New("本地文件删除失败, err:" + err.Error()) + } + } + } else { + if err = utils.DeleteFile(file.Key); err != nil { // 删除七牛云文件 + err = errors.New("七牛云文件删除失败, err:" + err.Error()) + } + } + err = global.GVA_DB.Where("id = ?", file.ID).Unscoped().Delete(file).Error return err } @@ -57,3 +78,30 @@ func GetFileRecordInfoList(info request.PageInfo) (err error, list interface{}, err = db.Limit(limit).Offset(offset).Order("updated_at desc").Find(&fileLists).Error return err, fileLists, total } + +// @title UploadFile +// @description 根据配置文件判断是文件上传到本地或者七牛云 +// @auth (2020/04/05 20:22) +// @param header *multipart.FileHeader +// @param noSave string +// @return err error +// @return file file model.ExaFileUploadAndDownload + +func UploadFile(header *multipart.FileHeader, noSave string) (err error, file model.ExaFileUploadAndDownload) { + var filePath, key string + var f model.ExaFileUploadAndDownload + if global.GVA_CONFIG.LocalUpload.Local { // 本地上传 + err, filePath, key = utils.UploadFileLocal(header) + } else { // 七牛云上传 + err, filePath, key = utils.UploadRemote(header) + } + if noSave == "0" { + f.Url = filePath + f.Name = header.Filename + s := strings.Split(f.Name, ".") + f.Tag = s[len(s)-1] + f.Key = key + return Upload(f), f + } + return +}