diff --git a/dao/file.go b/dao/file.go index f2843fd..bb0be6a 100644 --- a/dao/file.go +++ b/dao/file.go @@ -59,3 +59,19 @@ func UpdateFileByID(id, auth_id int, fileStoreName, fileName, fileType, filePath } return true } + +func DeleteFileByAuthID(auth_id int) bool { + res := DB.Debug().Model(&File{}).Where("auth_id = ?", auth_id).Delete(&File{}) + if res.Error != nil { + return false + } + return true +} + +func DeleteFileById(id int) bool { + res := DB.Debug().Model(&File{}).Where("id = ?", id).Delete(&File{}) + if res.Error != nil { + return false + } + return true +} diff --git a/handler/tool.go b/handler/tool.go index 8cb42bd..fdcbba3 100644 --- a/handler/tool.go +++ b/handler/tool.go @@ -27,6 +27,35 @@ func SetUpToolGroup(router *gin.Engine) { //文件上传、下载 toolGroup.POST("/upload", UploadFile) toolGroup.GET("/download", DownloadFile) + //文件管理 + toolGroup.POST("/file_del", DelFile) +} + +func DelFile(c *gin.Context) { + //先查看是否有权限 + id, _ := c.Get("id") + id1 := int(id.(float64)) + + file_id, _ := strconv.Atoi(c.PostForm("id")) + + file_ := dao.FindFileByID(file_id, id1) + if file_.ID == 0 { + c.JSON(http.StatusOK, gin.H{"error": "file not found", "code": proto.FileNotFound, "message": "failed"}) + return + } + //删除文件 + err := os.Remove(file_.FilePath + "/" + file_.FileStoreName) + if err != nil { + c.JSON(http.StatusOK, gin.H{"error": "delete file failed", "code": proto.DeleteFileFailed, "message": "failed"}) + return + } + //删除文件信息 + if res := dao.DeleteFileById(file_id); !res { + c.JSON(http.StatusOK, gin.H{"error": "delete file info failed", "code": proto.DeleteFileInfoFailed, "message": "failed"}) + return + } + c.JSON(http.StatusOK, gin.H{"code": proto.SuccessCode, "message": "success"}) + } func UploadFile(c *gin.Context) { @@ -53,7 +82,7 @@ func UploadFile(c *gin.Context) { } //保存文件 - filePath, fileStoreName, err := service.SaveFile(file, uploadType) + filePath, fileStoreName, err := service.SaveFile(c, file, uploadType) if err != nil { c.JSON(http.StatusOK, gin.H{"error": "save file failed", "code": proto.SaveFileFailed, "message": "failed"}) return diff --git a/proto/status.go b/proto/status.go index 2677aa4..6554ee8 100644 --- a/proto/status.go +++ b/proto/status.go @@ -51,10 +51,12 @@ const ( MsgSendFailed = 61 // 消息发送失败 //文件错误码 - FileNotFound = 71 // 文件不存在 - FileUploadFailed = 72 // 文件上传失败 - SaveFileInfoFailed = 73 // 保存文件信息失败 - SaveFileFailed = 74 // 保存文件失败 - UploadFileFailed = 75 // 上传文件失败 - NoUploadPermissions = 76 // 无上传权限 + FileNotFound = 71 // 文件不存在 + FileUploadFailed = 72 // 文件上传失败 + SaveFileInfoFailed = 73 // 保存文件信息失败 + SaveFileFailed = 74 // 保存文件失败 + UploadFileFailed = 75 // 上传文件失败 + NoUploadPermissions = 76 // 无上传权限 + DeleteFileFailed = 77 // 删除文件失败 + DeleteFileInfoFailed = 78 // 删除文件信息失败 ) diff --git a/service/fileService.go b/service/fileService.go index b5de17a..00ca429 100644 --- a/service/fileService.go +++ b/service/fileService.go @@ -1,8 +1,8 @@ package service import ( + "github.com/gin-gonic/gin" "github.com/google/uuid" - "io" "mime/multipart" "os" "path" @@ -26,7 +26,7 @@ func getFilePath(path string) string { return filePath } -func SaveFile(file *multipart.FileHeader, uploadType string) (string, string, error) { +func SaveFile(c *gin.Context, file *multipart.FileHeader, uploadType string) (string, string, error) { //获取文件后缀 fileSuffix := path.Ext(file.Filename) //生成文件名 @@ -35,23 +35,10 @@ func SaveFile(file *multipart.FileHeader, uploadType string) (string, string, er path_ := getFilePath(proto.FILE_BASE_DIR) filePath := path_ + "/" + fileStoreName - //保存文件file - dst, err := os.Create(filePath) - if err != nil { + //保存文件 + if err := c.SaveUploadedFile(file, filePath); err != nil { return "", "", err } - defer dst.Close() - - // 复制文件内容 - file_, err := file.Open() - if err != nil { - return "", "", err - } - _, err = io.Copy(dst, file_) - if err != nil { - return "", "", err - } - if uploadType == "2" { worker.PushRedisList("video_need_handle", filePath) }