package business import ( "bytes" "fmt" "net/http" "os" "os/exec" "strconv" "strings" "time" "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding" //"device-manage/app/admin/models" "device-manage/app/admin/models/busmodels" "device-manage/tools" "device-manage/tools/app" ) // @Summary 获取video列表 // @Description Get JSON // @Tags video列表 // @Param name query string false "name" // @Param status query string false "status" // @Param deviceSn query string false "deviceSn" // @Param pageSize query int false "页条数" // @Param pageIndex query int false "页码" // @Success 200 {object} app.Response "{"code": 200, "data": [...]}" // @Router /api/v1/device/list/devicelist [get] // @Security Bearer func GetVideoList(c *gin.Context) { var data busmodels.BusVideo var err error var pageSize = 10 var pageIndex = 1 size := c.Request.FormValue("pageSize") if size != "" { pageSize, err = tools.StringToInt(size) } index := c.Request.FormValue("pageIndex") if index != "" { pageIndex, err = tools.StringToInt(index) } data.VideoName = c.Request.FormValue("videoName") //data.VideoTime = c.Request.FormValue("videoTime") result, count, err := data.GetPage(pageSize, pageIndex) tools.HasError(err, "", -1) app.PageOK(c, result, count, pageIndex, pageSize, "") } func GetVideo(c *gin.Context) { videoInfo := busmodels.BusVideo{} IDS := tools.IdsStrToIdsIntGroup("videoId", c) result, err := videoInfo.GetVideo(IDS) tools.HasError(err, "获取视频信息出错", -1) app.OK(c, result, "") } func UpdateVideo(c *gin.Context) { var data busmodels.BusVideo data.UpdateBy = tools.GetUserIdStr(c) err := c.Bind(&data) tools.HasError(err, "数据解析失败", -1) result, err := data.Update() tools.HasError(err, "", -1) app.OK(c, result, "修改成功") } // uuid 作为保存路径 func UploadVideo(c *gin.Context) { videoInfo := busmodels.BusVideo{} //获取文件头 file, err := c.FormFile("file") uuid, _ := c.GetPostForm("uuid") fmt.Println(uuid) if err != nil { c.String(http.StatusBadRequest, "请求失败") return } //获取文件名 fileName := file.Filename destName := uuid + "." + strings.Split(fileName, ".")[1] destPath := "files/media" + "/" + uuid[0:2] + "/" + uuid[2:4] finalPath := destPath + "/" + destName fmt.Println("文件名 :", destName) fmt.Println("文件路径:", destPath) //保存文件到服务器本地 //SaveUploadedFile(文件头,保存路径) if _, err := os.Stat(destPath); err != nil { if err = os.MkdirAll(destPath, os.ModePerm); err != nil { fmt.Println(err) c.String(http.StatusBadRequest, "保存失败 Error:%s", err.Error()) return } } if _, err := os.Stat(finalPath); err != nil { if _, err = os.Create(finalPath); err != nil { fmt.Println(err) c.String(http.StatusBadRequest, "保存失败 Error:%s", err.Error()) return } } if err := c.SaveUploadedFile(file, finalPath); err != nil { c.String(http.StatusBadRequest, "保存失败 Error:%s", err.Error()) return } path, err := saveMediaCache(uuid, fileName, finalPath) if err != nil { return } videoInfo.VideoTitle = fileName videoInfo.VideoName = fileName videoInfo.VideoPath = destName videoInfo.CoverPath = path videoInfo.Size = strconv.FormatInt(file.Size, 10) app.OK(c, videoInfo, "") } func saveMediaCache(uuid, fileName string, filePath string) (string, error) { mediaCache := busmodels.BusMediaCache{} coverPath := strings.Split(filePath, ".")[0] + ".jpg" err, _, _ := Shellout("ffmpeg -i " + filePath + " -y -f image2 -ss 1 -t 0.0001 -s 640x480 " + coverPath) //fmt.Println("outStr:", outStr) //fmt.Println("errStr:", errStr) if err != nil { return "", err } mediaCache.MediaName = fileName mediaCache.MediaPath = filePath mediaCache.AddCache() return uuid + ".jpg", nil } func UploadVideoFormInfo(c *gin.Context) { var data busmodels.BusVideo var cache busmodels.BusMediaCache err := c.BindWith(&data, binding.JSON) tools.HasError(err, "非法数据格式", 500) fmt.Println(data) fileName := data.VideoPath videoPath := "files/media" + "/" + data.VideoPath[0:2] + "/" + data.VideoPath[2:4] + "/" + fileName cache.MediaPath = videoPath cache.MediaName = fileName if err := cache.GetCache(); err != nil { fmt.Println("cache is not existed.") tools.HasError(err, "数据已过期.", 500) } currentTime := time.Now() data.UpdateBy = tools.GetUserIdStr(c) data.CreateBy = tools.GetUserIdStr(c) data.UpdatedAt = currentTime data.CreatedAt = currentTime if id, err := data.Insert(); err != nil { tools.HasError(err, "添加失败", 500) } else { cache.DeleteCache() app.OK(c, id, "添加成功") } } func DeleteVideo(c *gin.Context) { var data busmodels.BusVideo data.UpdateBy = tools.GetUserIdStr(c) IDS := tools.IdsStrToIdsIntGroup("videoId", c) fmt.Println(IDS) result, err := data.BatchDelete(IDS) tools.HasError(err, "删除失败,已在列表中", 500) app.OK(c, result, "删除成功") } func DownloadVideo(c *gin.Context) { /* var data busmodels.BusVideo data.VideoId, _ = tools.StringToInt(c.Param("videoId")) //todo download device log result, err := data.GetVideo() tools.HasError(err, "抱歉未找到相关信息", -1) var res app.Response res.Data = result c.JSON(http.StatusOK, res.ReturnOK()) */ } // download video and get video info api handler func GetVideoHandler(c *gin.Context) { if c.Param("videoId") == "download" { DownloadVideo(c) } else { GetVideo(c) } } const ShellToUse = "bash" func Shellout(command string) (error, string, string) { var stdout bytes.Buffer var stderr bytes.Buffer cmd := exec.Command(ShellToUse, "-c", command) cmd.Stdout = &stdout cmd.Stderr = &stderr err := cmd.Run() return err, stdout.String(), stderr.String() }