package handler import ( "fmt" "github.com/gin-gonic/gin" "net/http" "os" "time" "videoplayer/service" ) // video获取视频列表请求 type gvlReq struct { StartTime string `json:"begin"` EndTime string `json:"end"` IP string `json:"ip"` Token string `json:"token"` } // video添加视频记录请求 type videoReq struct { CameraID int `json:"camera_id"` VideoPath string `json:"video_path"` VideoName string `json:"video_name"` AuthId int `json:"auth_id"` Human int `json:"human"` IsDelete int `json:"is_delete"` CreateTime string `json:"create_time"` EndTime string `json:"end_time"` DeleteTime string `json:"delete_time"` FileSize int `json:"file_size"` } type videoUpdateReq struct { ID int `json:"id"` CameraID int `json:"camera_id"` VideoPath string `json:"video_path"` VideoName string `json:"video_name"` AuthId int `json:"auth_id"` Human int `json:"human"` IsDelete int `json:"is_delete"` CreateTime string `json:"create_time"` EndTime string `json:"end_time"` DeleteTime string `json:"delete_time"` FileSize int `json:"file_size"` } // video播放视频请求 type videoPReq struct { ID int `json:"id"` Token string `json:"token"` AuthId string `json:"userId"` IP string `json:"ip"` } type VideoDelReq struct { ID int `json:"id"` } // video延迟视频请求 type delayReq struct { ID int `json:"id"` AuthId int `json:"userId"` Day int `json:"day"` } func SetUpVideoGroup(router *gin.Engine) { videoGroup := router.Group("/video") videoGroup.POST("/get_video_list", GetVideoList) videoGroup.POST("/create", CreateVideo) videoGroup.GET("/mp4", GetVideo) videoGroup.POST("/delay", DelayVideo) videoGroup.POST("/delete", DeleteVideo) videoGroup.POST("/update", UpdateVideo) } func UpdateVideo(c *gin.Context) { var video_req videoUpdateReq user_id, _ := c.Get("id") if err := c.ShouldBindJSON(&video_req); err == nil { res := service.UpdateVideo(video_req.VideoPath, video_req.VideoName, video_req.CameraID, video_req.ID, int(user_id.(float64)), video_req.Human, video_req.IsDelete, video_req.CreateTime, video_req.EndTime, video_req.FileSize) if !res { c.JSON(http.StatusBadRequest, gin.H{"error": "update video failed", "code": 1, "message": "failed"}) return } c.JSON(http.StatusOK, gin.H{"code": 0, "message": "success"}) } else { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "code": 1, "message": "failed"}) } } func GetVideo(c *gin.Context) { var vp_req videoPReq if err := c.ShouldBindQuery(&vp_req); err == nil { video := service.GetVideo(vp_req.ID, c.GetInt("id")) name := video.VideoName path := video.VideoPath if video.IsDelete == 0 { // 打开文件 file, err := os.Open(path + name) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } defer file.Close() // 设置响应头 c.Header("Content-Type", "video/mp4") // 开始传输文件 http.ServeContent(c.Writer, c.Request, name, time.Now(), file) // 传输文件, 传输文件的内容类型, 文件名, 文件最后修改时间, 文件 // 返回文件 c.JSON(http.StatusOK, gin.H{"message": "success", "code": 200}) } else { c.JSON(http.StatusBadRequest, gin.H{"error": "video is deleted"}) } } else { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) } } func CreateVideo(c *gin.Context) { var video_req videoReq user_id, _ := c.Get("id") if err := c.ShouldBindJSON(&video_req); err == nil { fmt.Println(video_req) id := service.CreateVideo(video_req.VideoPath, video_req.VideoName, video_req.CameraID, int(user_id.(float64)), video_req.Human, video_req.IsDelete, video_req.CreateTime, video_req.EndTime, video_req.FileSize) if id == 0 { c.JSON(http.StatusBadRequest, gin.H{"error": "create video failed", "code": 1, "message": "failed"}) return } c.JSON(http.StatusOK, gin.H{"id": id, "code": 0, "message": "success"}) } else { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "code": 1, "message": "failed"}) } } func GetVideoList(c *gin.Context) { var gvl_req gvlReq id, _ := c.Get("id") if err := c.ShouldBindJSON(&gvl_req); err == nil { videos := service.GetVideoList(int(id.(float64)), gvl_req.StartTime, gvl_req.EndTime) c.JSON(http.StatusOK, gin.H{"videos": videos, "code": 0, "message": "success"}) } else { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "code": 1, "message": "failed"}) } } func DelayVideo(c *gin.Context) { var delay_req delayReq id, _ := c.Get("id") if err := c.ShouldBindJSON(&delay_req); err == nil { service.DelayVideo(delay_req.ID, int(id.(float64)), delay_req.Day) c.JSON(http.StatusOK, gin.H{"code": 0, "message": "success"}) } else { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "code": 1, "message": "failed"}) } } func DeleteVideo(c *gin.Context) { var video_req VideoDelReq id, _ := c.Get("id") if err := c.ShouldBindJSON(&video_req); err == nil { service.DeleteVideo(video_req.ID, int(id.(float64))) c.JSON(http.StatusOK, gin.H{"code": 0, "message": "success"}) } else { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error(), "code": 1, "message": "failed"}) } }