Selaa lähdekoodia

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

SliverHorn 4 vuotta sitten
vanhempi
commit
88ba34402a

+ 11 - 49
server/api/v1/exa_file_upload_download.go

@@ -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 (
 // @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 {
-		// 文件上传后拿到文件路径
-		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
 // @Tags ExaFileUploadAndDownload
@@ -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 != nil {
+	if err := service.DeleteFile(file); err != nil {
 		response.FailWithMessage(fmt.Sprintf("删除失败,%v", err), c)
 		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
 // @Tags ExaFileUploadAndDownload

+ 50 - 2
server/service/exa_file_upload_download.go

@@ -1,9 +1,14 @@
 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) {
 // @param     file            model.ExaFileUploadAndDownload
 // @param     file            model.ExaFileUploadAndDownload
 // @return                    error
 // @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
 	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
 	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
+}