痛点:
r.Static("/static/" , "static")
r.StaticFS("/static/" , http.Dir("./static"))
假设我有100万文件,在目录里,被人访问了几下,就那么几下,发现服务挂了。。。真不知道当时发明 gin 的小天才怎么想的。。。或许是我用的不对。。
解决:
//StaticHandler 设置单文件访问,不能访问目录
func StaticHandler(relativePath string, fs string , r *gin.Engine) {
r.GET(relativePath + "*filepath" , func(c *gin.Context) {
file := c.Param("filepath")
name, err := filepath.Abs(fs + file)
info, err := os.Stat(name)
if err == nil {
if !info.IsDir() {
http.ServeFile(c.Writer, c.Request, name)
} else {
c.Writer.WriteHeader(http.StatusNotFound)
}
} else {
c.Writer.WriteHeader(http.StatusNotFound)
}
})
}
用法:
// 1.创建路由
r := gin.Default()
/*
第一个参数 代表我的静态资源目录是那个
例如域名:www.baidu.com ,
/static/ 代表 www.baidu.com/static/是一个静态资源目录存放的地址
第二个参数代表我的静态目录在当前目录的那个文件夹下
- 项目
- main.go
- static
这种静态目录,你的 gin.Default 假设在 main.go 里面写的,
main.go 和 static 平级,那么你就直接写 ./static/
第三个参数你就直接把 r := gin.Default 的 r 直接丢进去
*/
/
StaticHandler("/static/" , "./static/" , r)
反正思路就是这么个思路,有更好的方法控制资源目录可以留言