简单版本视频播放服务器V4
前一个版本内容,可以查看
https://blog.csdn.net/wtt234/article/details/131759154
优化内容:
1.返回列表的优化,优化了原来返回空列表名称的问题
2.前端才有layui优化内容
后端:
package main
import (
"fmt"
"io/ioutil"
"net/http"
"os"
"path"
"strings"
"github.com/gin-gonic/gin"
)
// 这个代码在windows,linux中都是可以使用,这里重点关注的就是
//
// videos := fmt.Sprintf("%s/%s", ml, "videos") 这样设置 windows linux都是可以使用
//
// 实现遍历程序的当前目录videos下的文件
func ListDir() ([]string, error) {
ml, _ := os.Getwd()
videos := fmt.Sprintf("%s/%s", ml, "videos")
infos, err := ioutil.ReadDir(videos)
if err != nil {
return nil, err
}
//names := make([]string, len(infos)) 这里容易有问题!!!
names := make([]string, 0)
for _, info := range infos {
//获取文件名 确认以*MP4结尾的放入切片中
filename := info.Name()
//fmt.Printf("name:%v,kind:%T\n", filename, filename)
把layui的包文件过滤掉,里面有css,js文件等
//if filename == "layui" {
// continue
//}
//fmt.Printf("name%v,type:%T", filename, filename)
isbool := strings.HasSuffix(filename, ".mp4")
if isbool {
//if filename
//优化的地方,如果不优化,的话,返回的slcie中会有空“文件名”的出现
//names[i] = info.Name()
names = append(names, filename)
}
}
fmt.Printf("%s==>%d", names, len(names))
//fmt.Printf("is:===>%v", names)
return names, nil
}
func ListDirllinux() ([]string, error) {
ml, _ := os.Getwd()
videos := fmt.Sprintf("%s//%s", ml, "videos")
infos, err := ioutil.ReadDir(videos)
if err != nil {
return nil, err
}
names := make([]string, len(infos))
for i, info := range infos {
//获取文件名 确认以*MP4结尾的放入切片中
filename := info.Name()
//fmt.Println(filename)
if strings.HasSuffix(filename, ".mp4") {
//if filename
names[i] = info.Name()
}
}
return names, nil
}
// 文件下载功能实现
func DowFile(c *gin.Context) {
//通过动态路由方式获取文件名,以实现下载不同文件的功能
name := c.Param("name")
//拼接路径,如果没有这一步,则默认在当前路径下寻找
filename := path.Join("./videos", name)
//响应一个文件
c.File(filename)
return
}
func main() {
r := gin.Default()
r.LoadHTMLGlob("templates/*")
// 初始化默认静态资源
r.StaticFS("/videos", http.Dir("./videos"))
//windows 和linux下的路径稍微不同
names, _ := ListDir()
//names, _ := ListDirllinux()
r.GET("/index", func(c *gin.Context) {
//c.HTML(http.StatusOK, "index.html", gin.H{"names": names})
//c.HTML(http.StatusOK, "index.html", gin.H{"names": names})
c.HTML(http.StatusOK, "layui_index.html", gin.H{"names": names})
//c.HTML(http.StatusOK, "index_lab.html", gin.H{"names": names})
})
r.GET("/GetFile/:name", DowFile)
//r.Run()
r.Run("0.0.0.0:8080")
}
前端:
视频播放
-->
优化slice