这是我参与「第五届青训营 」伴学笔记创作活动的第 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缓存、评论可以加敏感此过滤、消息队列