提交 88ba3440 编写于 作者: Sliver_Horn's avatar Sliver_Horn

优化上传与下载文件示例的上传与删除的api层与service层代码

上级 abbe1cb5
...@@ -2,15 +2,12 @@ package v1 ...@@ -2,15 +2,12 @@ package v1
import ( import (
"fmt" "fmt"
"gin-vue-admin/global"
"gin-vue-admin/global/response" "gin-vue-admin/global/response"
"gin-vue-admin/model" "gin-vue-admin/model"
"gin-vue-admin/model/request" "gin-vue-admin/model/request"
resp "gin-vue-admin/model/response" resp "gin-vue-admin/model/response"
"gin-vue-admin/service" "gin-vue-admin/service"
"gin-vue-admin/utils"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"strings"
) )
// @Tags ExaFileUploadAndDownload // @Tags ExaFileUploadAndDownload
...@@ -22,42 +19,19 @@ import ( ...@@ -22,42 +19,19 @@ import (
// @Success 200 {string} string "{"success":true,"data":{},"msg":"上传成功"}" // @Success 200 {string} string "{"success":true,"data":{},"msg":"上传成功"}"
// @Router /fileUploadAndDownload/upload [post] // @Router /fileUploadAndDownload/upload [post]
func UploadFile(c *gin.Context) { func UploadFile(c *gin.Context) {
var file model.ExaFileUploadAndDownload
noSave := c.DefaultQuery("noSave", "0") noSave := c.DefaultQuery("noSave", "0")
_, header, err := c.Request.FormFile("file") _, header, err := c.Request.FormFile("file")
if err != nil { if err != nil {
response.FailWithMessage(fmt.Sprintf("上传文件失败,%v", err), c) response.FailWithMessage(fmt.Sprintf("上传文件失败,%v", err), c)
} else { return
// 文件上传后拿到文件路径 }
var uploadErr error err, file = service.UploadFile(header, noSave) // 文件上传后拿到文件路径
var filePath string if err != nil {
var key string response.FailWithMessage(fmt.Sprintf("修改数据库链接失败,%v", err), c)
if global.GVA_CONFIG.LocalUpload.Local { return
// 本地上传
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)
}
}
} }
response.OkDetailed(resp.ExaFileResponse{File: file}, "上传成功", c)
} }
// @Tags ExaFileUploadAndDownload // @Tags ExaFileUploadAndDownload
...@@ -70,23 +44,11 @@ func UploadFile(c *gin.Context) { ...@@ -70,23 +44,11 @@ func UploadFile(c *gin.Context) {
func DeleteFile(c *gin.Context) { func DeleteFile(c *gin.Context) {
var file model.ExaFileUploadAndDownload var file model.ExaFileUploadAndDownload
_ = c.ShouldBindJSON(&file) _ = c.ShouldBindJSON(&file)
err, f := service.FindFile(file.ID) if err := service.DeleteFile(file); err != nil {
if err != nil {
response.FailWithMessage(fmt.Sprintf("删除失败,%v", err), c) response.FailWithMessage(fmt.Sprintf("删除失败,%v", err), c)
} else { return
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)
}
}
} }
response.OkWithMessage("删除成功", c)
} }
// @Tags ExaFileUploadAndDownload // @Tags ExaFileUploadAndDownload
......
package service package service
import ( import (
"errors"
"gin-vue-admin/global" "gin-vue-admin/global"
"gin-vue-admin/model" "gin-vue-admin/model"
"gin-vue-admin/model/request" "gin-vue-admin/model/request"
"gin-vue-admin/utils"
"mime/multipart"
"os"
"strings"
) )
// @title Upload // @title Upload
...@@ -35,8 +40,24 @@ func FindFile(id uint) (error, model.ExaFileUploadAndDownload) { ...@@ -35,8 +40,24 @@ func FindFile(id uint) (error, model.ExaFileUploadAndDownload) {
// @param file model.ExaFileUploadAndDownload // @param file model.ExaFileUploadAndDownload
// @return error // @return error
func DeleteFile(file model.ExaFileUploadAndDownload) error { func DeleteFile(file model.ExaFileUploadAndDownload) (err error) {
err := global.GVA_DB.Where("id = ?", file.ID).Unscoped().Delete(file).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 return err
} }
...@@ -57,3 +78,30 @@ func GetFileRecordInfoList(info request.PageInfo) (err error, list interface{}, ...@@ -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 err = db.Limit(limit).Offset(offset).Order("updated_at desc").Find(&fileLists).Error
return err, fileLists, total 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
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册