2024-07-19 09:43:17 +08:00
|
|
|
package handler
|
|
|
|
|
|
|
|
|
|
import (
|
2024-08-30 15:40:45 +08:00
|
|
|
"fmt"
|
2024-07-19 09:43:17 +08:00
|
|
|
"github.com/gin-gonic/gin"
|
2024-08-30 15:40:45 +08:00
|
|
|
"io"
|
2024-07-19 09:43:17 +08:00
|
|
|
"net/http"
|
2024-08-30 15:40:45 +08:00
|
|
|
"os"
|
2024-08-30 15:26:39 +08:00
|
|
|
"strconv"
|
2024-07-19 09:43:17 +08:00
|
|
|
"videoplayer/dao"
|
|
|
|
|
"videoplayer/proto"
|
2024-07-21 11:00:08 +08:00
|
|
|
"videoplayer/service"
|
2024-07-19 09:43:17 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type SetRedisReq struct {
|
|
|
|
|
Option string `json:"option" form:"option"`
|
|
|
|
|
Key string `json:"key" form:"key"`
|
|
|
|
|
Value string `json:"value" form:"value"`
|
|
|
|
|
Expire int `json:"expire" form:"expire"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func SetUpToolGroup(router *gin.Engine) {
|
|
|
|
|
toolGroup := router.Group("/tool")
|
|
|
|
|
toolGroup.POST("/set_redis", SetRedis)
|
2024-07-21 11:00:08 +08:00
|
|
|
toolGroup.POST("/get_redis", GetRedis)
|
2024-08-30 11:28:27 +08:00
|
|
|
|
|
|
|
|
//文件上传、下载
|
|
|
|
|
toolGroup.POST("/upload", UploadFile)
|
2024-08-30 15:41:51 +08:00
|
|
|
toolGroup.GET("/download", DownloadFile)
|
2024-08-30 11:28:27 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func UploadFile(c *gin.Context) {
|
|
|
|
|
//先查看是否有权限
|
|
|
|
|
id, _ := c.Get("id")
|
|
|
|
|
id1 := int(id.(float64))
|
|
|
|
|
//从请求头获取upload_type
|
2024-08-30 15:13:23 +08:00
|
|
|
uploadType := c.PostForm("upload_type")
|
|
|
|
|
if uploadType == "" {
|
|
|
|
|
c.JSON(http.StatusOK, gin.H{"error": "upload_type is empty", "code": proto.ParameterError, "message": "failed"})
|
|
|
|
|
return
|
|
|
|
|
}
|
2024-08-30 11:28:27 +08:00
|
|
|
|
|
|
|
|
user := dao.FindUserByUserID(id1)
|
|
|
|
|
if user.Upload == false {
|
|
|
|
|
c.JSON(http.StatusOK, gin.H{"error": "no upload Permissions", "code": proto.NoUploadPermissions, "message": "failed"})
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
//上传文件
|
|
|
|
|
file, err := c.FormFile("file")
|
|
|
|
|
if err != nil {
|
|
|
|
|
c.JSON(http.StatusOK, gin.H{"error": "upload file failed", "code": proto.UploadFileFailed, "message": "failed"})
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//保存文件
|
|
|
|
|
filePath, fileStoreName, err := service.SaveFile(file, uploadType)
|
|
|
|
|
if err != nil {
|
|
|
|
|
c.JSON(http.StatusOK, gin.H{"error": "save file failed", "code": proto.SaveFileFailed, "message": "failed"})
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
//保存文件信息
|
|
|
|
|
fileSize := int(file.Size)
|
|
|
|
|
fileName := file.Filename
|
|
|
|
|
fileType := file.Header.Get("file_type")
|
|
|
|
|
fileID := dao.CreateFile(fileStoreName, fileName, fileType, filePath, fileSize, id1)
|
|
|
|
|
if fileID == 0 {
|
|
|
|
|
c.JSON(http.StatusOK, gin.H{"error": "save file info failed", "code": proto.SaveFileInfoFailed, "message": "failed"})
|
|
|
|
|
return
|
|
|
|
|
}
|
2024-08-30 15:26:39 +08:00
|
|
|
c.JSON(http.StatusOK, gin.H{"code": proto.SuccessCode, "message": "success"})
|
2024-08-30 11:28:27 +08:00
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func DownloadFile(c *gin.Context) {
|
|
|
|
|
//参数
|
2024-08-30 15:26:39 +08:00
|
|
|
//filename := c.Param("filename")
|
|
|
|
|
file_id, _ := strconv.Atoi(c.Query("id"))
|
2024-08-30 11:28:27 +08:00
|
|
|
id, _ := c.Get("id")
|
|
|
|
|
//查询文件信息
|
2024-08-30 15:26:39 +08:00
|
|
|
//file := dao.FindFileByNames(file_id, int(id.(float64)))
|
2024-08-30 15:40:45 +08:00
|
|
|
file_ := dao.FindFileByID(file_id, int(id.(float64)))
|
|
|
|
|
if file_.ID == 0 {
|
2024-08-30 11:28:27 +08:00
|
|
|
c.JSON(http.StatusOK, gin.H{"error": "file not found", "code": proto.FileNotFound, "message": "failed"})
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
//下载文件
|
2024-08-30 15:40:45 +08:00
|
|
|
// 打开文件
|
|
|
|
|
file, err := os.Open(file_.FilePath + "/" + file_.FileStoreName)
|
|
|
|
|
if err != nil {
|
|
|
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": "Internal Server Error", "message": "Failed to open file"})
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
defer file.Close()
|
|
|
|
|
|
|
|
|
|
// 设置响应头
|
|
|
|
|
c.Writer.Header().Set("Content-Description", "File Transfer")
|
|
|
|
|
c.Writer.Header().Set("Content-Transfer-Encoding", "binary")
|
|
|
|
|
c.Writer.Header().Set("Expires", "0")
|
|
|
|
|
c.Writer.Header().Set("Cache-Control", "must-revalidate")
|
|
|
|
|
c.Writer.Header().Set("Pragma", "public")
|
|
|
|
|
c.Writer.Header().Set("Content-Type", "application/octet-stream")
|
|
|
|
|
c.Writer.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=\"%s\"", file_.FileName))
|
|
|
|
|
|
|
|
|
|
// 发送文件内容
|
|
|
|
|
_, err = io.Copy(c.Writer, file)
|
|
|
|
|
if err != nil {
|
|
|
|
|
c.JSON(http.StatusInternalServerError, gin.H{"error": "Internal Server Error", "message": "Failed to send file"})
|
|
|
|
|
return
|
|
|
|
|
}
|
2024-07-19 09:43:17 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func SetRedis(c *gin.Context) {
|
|
|
|
|
//先查看是否有权限
|
|
|
|
|
id, _ := c.Get("id")
|
|
|
|
|
id1 := int(id.(float64))
|
|
|
|
|
user := dao.FindUserByUserID(id1)
|
|
|
|
|
if user.Redis == false {
|
|
|
|
|
c.JSON(http.StatusOK, gin.H{"error": "no redis Permissions", "code": proto.NoRedisPermissions, "message": "failed"})
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
//解析请求参数
|
|
|
|
|
var req SetRedisReq
|
|
|
|
|
if err := c.ShouldBind(&req); err == nil {
|
2024-07-21 11:00:08 +08:00
|
|
|
var code int
|
|
|
|
|
var message string
|
|
|
|
|
if req.Option == "list" {
|
|
|
|
|
code, message = service.SetToolRedisList(req.Key, req.Value, req.Expire)
|
|
|
|
|
} else if req.Option == "set" {
|
|
|
|
|
code, message = service.SetToolRedisSet(req.Key, req.Value, req.Expire)
|
|
|
|
|
} else if req.Option == "kv" {
|
|
|
|
|
code, message = service.SetToolRedisKV(req.Key, req.Value, req.Expire)
|
|
|
|
|
}
|
|
|
|
|
c.JSON(http.StatusOK, gin.H{"code": code, "message": message})
|
|
|
|
|
} else {
|
|
|
|
|
c.JSON(http.StatusOK, gin.H{"error": "parameter error", "code": proto.ParameterError, "message": "failed"})
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|
2024-07-19 09:43:17 +08:00
|
|
|
|
2024-07-21 11:00:08 +08:00
|
|
|
func GetRedis(c *gin.Context) {
|
|
|
|
|
//先查看是否有权限
|
|
|
|
|
id, _ := c.Get("id")
|
|
|
|
|
id1 := int(id.(float64))
|
|
|
|
|
user := dao.FindUserByUserID(id1)
|
|
|
|
|
if user.Redis == false {
|
|
|
|
|
c.JSON(http.StatusOK, gin.H{"error": "no redis Permissions", "code": proto.NoRedisPermissions, "message": "failed"})
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
//解析请求参数
|
|
|
|
|
var req SetRedisReq
|
|
|
|
|
if err := c.ShouldBind(&req); err == nil {
|
|
|
|
|
code, message := service.GetToolRedis(req.Key)
|
|
|
|
|
req.Value = message
|
|
|
|
|
c.JSON(http.StatusOK, gin.H{"code": code, "message": message, "data": req})
|
2024-07-19 09:43:17 +08:00
|
|
|
} else {
|
|
|
|
|
c.JSON(http.StatusOK, gin.H{"error": "parameter error", "code": proto.ParameterError, "message": "failed"})
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
}
|