video.go 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. package business
  2. import (
  3. "bytes"
  4. "fmt"
  5. "net/http"
  6. "os"
  7. "os/exec"
  8. "strconv"
  9. "strings"
  10. "time"
  11. "github.com/gin-gonic/gin"
  12. "github.com/gin-gonic/gin/binding"
  13. //"device-manage/app/admin/models"
  14. "device-manage/app/admin/models/busmodels"
  15. "device-manage/tools"
  16. "device-manage/tools/app"
  17. )
  18. // @Summary 获取video列表
  19. // @Description Get JSON
  20. // @Tags video列表
  21. // @Param name query string false "name"
  22. // @Param status query string false "status"
  23. // @Param deviceSn query string false "deviceSn"
  24. // @Param pageSize query int false "页条数"
  25. // @Param pageIndex query int false "页码"
  26. // @Success 200 {object} app.Response "{"code": 200, "data": [...]}"
  27. // @Router /api/v1/device/list/devicelist [get]
  28. // @Security Bearer
  29. func GetVideoList(c *gin.Context) {
  30. var data busmodels.BusVideo
  31. var err error
  32. var pageSize = 10
  33. var pageIndex = 1
  34. size := c.Request.FormValue("pageSize")
  35. if size != "" {
  36. pageSize, err = tools.StringToInt(size)
  37. }
  38. index := c.Request.FormValue("pageIndex")
  39. if index != "" {
  40. pageIndex, err = tools.StringToInt(index)
  41. }
  42. data.VideoName = c.Request.FormValue("videoName")
  43. //data.VideoTime = c.Request.FormValue("videoTime")
  44. result, count, err := data.GetPage(pageSize, pageIndex)
  45. tools.HasError(err, "", -1)
  46. app.PageOK(c, result, count, pageIndex, pageSize, "")
  47. }
  48. func GetVideo(c *gin.Context) {
  49. videoInfo := busmodels.BusVideo{}
  50. IDS := tools.IdsStrToIdsIntGroup("videoId", c)
  51. result, err := videoInfo.GetVideo(IDS)
  52. tools.HasError(err, "获取视频信息出错", -1)
  53. app.OK(c, result, "")
  54. }
  55. func UpdateVideo(c *gin.Context) {
  56. var data busmodels.BusVideo
  57. data.UpdateBy = tools.GetUserIdStr(c)
  58. err := c.Bind(&data)
  59. tools.HasError(err, "数据解析失败", -1)
  60. result, err := data.Update()
  61. tools.HasError(err, "", -1)
  62. app.OK(c, result, "修改成功")
  63. }
  64. // uuid 作为保存路径
  65. func UploadVideo(c *gin.Context) {
  66. videoInfo := busmodels.BusVideo{}
  67. //获取文件头
  68. file, err := c.FormFile("file")
  69. uuid, _ := c.GetPostForm("uuid")
  70. fmt.Println(uuid)
  71. if err != nil {
  72. c.String(http.StatusBadRequest, "请求失败")
  73. return
  74. }
  75. //获取文件名
  76. fileName := file.Filename
  77. destName := uuid + "." + strings.Split(fileName, ".")[1]
  78. destPath := "files/media" + "/" + uuid[0:2] + "/" + uuid[2:4]
  79. finalPath := destPath + "/" + destName
  80. fmt.Println("文件名 :", destName)
  81. fmt.Println("文件路径:", destPath)
  82. //保存文件到服务器本地
  83. //SaveUploadedFile(文件头,保存路径)
  84. if _, err := os.Stat(destPath); err != nil {
  85. if err = os.MkdirAll(destPath, os.ModePerm); err != nil {
  86. fmt.Println(err)
  87. c.String(http.StatusBadRequest, "保存失败 Error:%s", err.Error())
  88. return
  89. }
  90. }
  91. if _, err := os.Stat(finalPath); err != nil {
  92. if _, err = os.Create(finalPath); err != nil {
  93. fmt.Println(err)
  94. c.String(http.StatusBadRequest, "保存失败 Error:%s", err.Error())
  95. return
  96. }
  97. }
  98. if err := c.SaveUploadedFile(file, finalPath); err != nil {
  99. c.String(http.StatusBadRequest, "保存失败 Error:%s", err.Error())
  100. return
  101. }
  102. path, err := saveMediaCache(uuid, fileName, finalPath)
  103. if err != nil {
  104. return
  105. }
  106. videoInfo.VideoTitle = fileName
  107. videoInfo.VideoName = fileName
  108. videoInfo.VideoPath = destName
  109. videoInfo.CoverPath = path
  110. videoInfo.Size = strconv.FormatInt(file.Size, 10)
  111. app.OK(c, videoInfo, "")
  112. }
  113. func saveMediaCache(uuid, fileName string, filePath string) (string, error) {
  114. mediaCache := busmodels.BusMediaCache{}
  115. coverPath := strings.Split(filePath, ".")[0] + ".jpg"
  116. err, _, _ := Shellout("ffmpeg -i " + filePath + " -y -f image2 -ss 1 -t 0.0001 -s 640x480 " + coverPath)
  117. //fmt.Println("outStr:", outStr)
  118. //fmt.Println("errStr:", errStr)
  119. if err != nil {
  120. return "", err
  121. }
  122. mediaCache.MediaName = fileName
  123. mediaCache.MediaPath = filePath
  124. mediaCache.AddCache()
  125. return uuid + ".jpg", nil
  126. }
  127. func UploadVideoFormInfo(c *gin.Context) {
  128. var data busmodels.BusVideo
  129. var cache busmodels.BusMediaCache
  130. err := c.BindWith(&data, binding.JSON)
  131. tools.HasError(err, "非法数据格式", 500)
  132. fmt.Println(data)
  133. fileName := data.VideoPath
  134. videoPath := "files/media" + "/" + data.VideoPath[0:2] + "/" + data.VideoPath[2:4] + "/" + fileName
  135. cache.MediaPath = videoPath
  136. cache.MediaName = fileName
  137. if err := cache.GetCache(); err != nil {
  138. fmt.Println("cache is not existed.")
  139. tools.HasError(err, "数据已过期.", 500)
  140. }
  141. currentTime := time.Now()
  142. data.UpdateBy = tools.GetUserIdStr(c)
  143. data.CreateBy = tools.GetUserIdStr(c)
  144. data.UpdatedAt = currentTime
  145. data.CreatedAt = currentTime
  146. if id, err := data.Insert(); err != nil {
  147. tools.HasError(err, "添加失败", 500)
  148. } else {
  149. cache.DeleteCache()
  150. app.OK(c, id, "添加成功")
  151. }
  152. }
  153. func DeleteVideo(c *gin.Context) {
  154. var data busmodels.BusVideo
  155. data.UpdateBy = tools.GetUserIdStr(c)
  156. IDS := tools.IdsStrToIdsIntGroup("videoId", c)
  157. fmt.Println(IDS)
  158. result, err := data.BatchDelete(IDS)
  159. tools.HasError(err, "删除失败,已在列表中", 500)
  160. app.OK(c, result, "删除成功")
  161. }
  162. func DownloadVideo(c *gin.Context) {
  163. /* var data busmodels.BusVideo
  164. data.VideoId, _ = tools.StringToInt(c.Param("videoId"))
  165. //todo download device log
  166. result, err := data.GetVideo()
  167. tools.HasError(err, "抱歉未找到相关信息", -1)
  168. var res app.Response
  169. res.Data = result
  170. c.JSON(http.StatusOK, res.ReturnOK()) */
  171. }
  172. // download video and get video info api handler
  173. func GetVideoHandler(c *gin.Context) {
  174. if c.Param("videoId") == "download" {
  175. DownloadVideo(c)
  176. } else {
  177. GetVideo(c)
  178. }
  179. }
  180. const ShellToUse = "bash"
  181. func Shellout(command string) (error, string, string) {
  182. var stdout bytes.Buffer
  183. var stderr bytes.Buffer
  184. cmd := exec.Command(ShellToUse, "-c", command)
  185. cmd.Stdout = &stdout
  186. cmd.Stderr = &stderr
  187. err := cmd.Run()
  188. return err, stdout.String(), stderr.String()
  189. }