大项目第三天|青训营

106 阅读2分钟

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

今日进度

  • 首先值得高兴的是:终于极限赶完了,虽然质量不咋地,但是所有接口都实现了,最最最基础的测试也过了,而且可以完成基础使用。

下面为昨日bug

  • 需解决问题1:在上传视频部分有一个视频封面,但是客户端没有上传过来,需要通过截取视频的第一帧作为封面。
    解决方法:通过已经存储在本地的视频,使用ffmpeg截取视频的第一帧并保存在本地,作为视频封面并将coverurl保存在数据库。
// GenerateVideoCover 获取封面
func GenerateVideoCover(inFileName string, frameNum int, coverName string) string {
   buf := bytes.NewBuffer(nil)
   err := ffmpeg.Input(inFileName).
      Filter("select", ffmpeg.Args{fmt.Sprintf("gte(n,%d)", frameNum)}).
      Output("pipe:", ffmpeg.KwArgs{"vframes": 1, "format": "image2", "vcodec": "mjpeg"}).
      WithOutput(buf, os.Stdout).
      Run()
   if err != nil {
      panic(err)
      return ""
   }

   filePath := "public/video_cover/" + coverName + ".jpg"
   outFile, err := os.Create(filePath)
   if err != nil {
      fmt.Println(err)
      return ""
   }
   defer outFile.Close()

   _, err = io.Copy(outFile, buf)
   if err != nil {
      fmt.Println(err)
      return ""
   }
   coverCul := SeverIp + ":8080" + "/static/video_cover/" + coverName + ".jpg"
   return coverCul
}
  • 需解决问题2:一些基础的安全问题,包括但不止笔填字段非空。
    解决方法:将每一个从客户端从过来的字段都进行非空判断。

  • 需解决问题3:通过某些方法实现防止sql注入
    解决方法:通过正则判断字段内容是否存在非法字段:(1)判断有sql注入相关字段;(2)过滤 ‘;(3)ORACLE 注解 -- /**/;(4)关键字过滤 update ,delete;(5)正则的字符串, 不能用 " " 因为" "里面的内容会转义。

func FilteredSQLInject(toMatchStr string, isNUll int) bool { // isNull: 1 非空 0 可以为空
   // 非空字段不能为空
   if isNUll == 1 && toMatchStr == "" {
      return true
   }

   str := `(?:')|(?:--)|(/\*(?:.|[\n\r])*?\*/)|(\b(select|update|and|or|delete|insert|trancate|char|chr|into|substr|ascii|declare|exec|count|master|into|drop|execute)\b)`
   re, err := regexp.Compile(str)
   if err != nil {
      panic(err.Error())
      return false
   }
   return re.MatchString(toMatchStr)
}
  • 需解决问题4上传视频的名字需要修改,通过添加随机数或者跟id绑定等办法(当名字相同的视频先后上传时,后面的视频会将前面的覆盖掉)
    解决方法:想了很多办法,最后还是决定了使用userid+大随机数作为视频名字,因为大随机数范围在10的18次方,再加上userid,重复的可能性就不大。

明日安排

  • 文档还没有写完,把文档补充完善
  • 视频录制与剪辑
  • 有时间的话就优化一下代码吧,比如说:数据库加索引、加入redis缓存、评论可以加敏感此过滤、消息队列