大项目第二天|青训营

64 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天

今日进度

今天写了一天的接口,昨天在token那里困住了,今天终于解决了,但是在写接口的时候也遇到了很多问题:

  1. 怎么把客户端传过来的视频流转换并且保存在本地?
    解决方案:(1) 首先,将客户端传过来的视频流转换成流媒体格式,可以使用ffmpeg等视频流媒体转换器转换成流媒体格式,如rtmp、hls等; (2) 然后,使用ffmpeg等视频流媒体服务器解析流媒体格式,将视频流存储到本地文件中; (3) 最后,使用ffmpeg等视频格式转换器将本地文件转换成需要的视频格式,并将视频保存到本地。
// 获取上传的文件
file, err := c.FormFile("data")
if err != nil {
   c.JSON(http.StatusOK, Response{
      StatusCode: 1,
      StatusMsg:  "获取上传的文件 error",
   })
   return
}

// 读取文件数据
fileBytes, err := file.Open()
if err != nil {
   c.JSON(http.StatusOK, Response{
      StatusCode: 1,
      StatusMsg:  "读取文件数据 error",
   })
   return
}
defer fileBytes.Close()

// 获取当前的工作目录
wd, err := os.Getwd()
if err != nil {
   c.JSON(http.StatusOK, Response{
      StatusCode: 1,
      StatusMsg:  err.Error(),
   })
   return
}

// 存储到本地 ?? 更改filename
filePath := wd + "/public/video/" + file.Filename
playurl := SeverIp + ":8080" + "/static/video/" + file.Filename
fmt.Println("playurl: ", playurl)
outFile, err := os.Create(filePath)
if err != nil {
   c.JSON(http.StatusOK, Response{
      StatusCode: 1,
      StatusMsg:  err.Error(),
   })
   return
}
defer outFile.Close()

_, err = io.Copy(outFile, fileBytes)
if err != nil {
   c.JSON(http.StatusOK, Response{
      StatusCode: 1,
      StatusMsg:  "io.Copy error",
   })
   return
}
  1. type存在嵌套字段,在需要返回该type类型时应该怎么解决?(比如说在video里面嵌套着一个user)
    解决方案:在调用mysql存储函数的返回字段添加一个userid,然后每一次都根据userid进行查询userinfo,再把查询到的user丢进对应的type字段里面。
// 补充user
for id, _ := range commentsList {
   var user User
   err = dal.DB.Raw("CALL user_info(?)", commentsList[id].Userid).Scan(&user).Error
   if err != nil {
      c.JSON(http.StatusOK, VideoListResponse{
         Response: Response{StatusCode: 1, StatusMsg: "User doesn't exist"},
      })
      return
   }
   commentsList[id].User = user

}
  1. 新增了userid字段,但是我返回的时候不想让它映射怎么办?
    解决方案:在type对应字段后面加入“gorm-”
type Comment struct {
   Id         int64  `json:"id,omitempty"`
   User       User   `json:"user" gorm:"-"`
   Content    string `json:"content,omitempty"`
   CreateDate string

   Userid int64 `json:"-"`
}

虽然接口已经初步完成了,但是在测试的时候还存在很多的问题,比如说有的时候视频就播放不了了;调用的存储过程明明就没有,但是它又没有报错;安卓模拟器有时候会卡bug等等。

明日需解决的问题

  1. 在上传视频部分有一个视频封面,但是客户端没有上传过来,需要通过截取视频的第一帧作为封面
  2. 一些基础的安全问题,包括但不止笔填字段非空
  3. 防止sql注入
  4. 上传视频的名字需要修改,通过添加随机数或者跟id绑定等办法(当名字相同的视频先后上传时,后面的视频会将前面的覆盖掉)