某一日,去Mozilla官网下载软件的时候不禁想,如果我也有个HTTP文件服务器该多方便啊。现在学习Gin后,想着要不要自己动手实践一下。
那么首先,进行一下简单的需求分析:
- 个人用的文件服务器没必要用上集群(一般也没条件),单机既可
- 我们通过HTTP请求来进行文件的检索
- 对于目录的请求,应当返回当前路径、文件列表
- 对于文件的请求,应当以下载的形式返回文件
- 文件列表应包含:文件类型、文件名、大小、创建日期、修改日期
然后开干,起手先把最基本的初始化做了。
main.go
func main() {
router := gin.Default()
initRouter(router)
router.Run()
}
init.go
func initRouter(r *gin.Engine) {
r.GET("/*path", get)
}
以通过通配符来抓取全局的GET请求
以返回status的方式确定联通后,编写文件逻辑:
get:
- 如果请求url的最后一位是
/那就返回对应的目录及目录下文件等。 - 否则返回文件。
本来感觉还能写上一阵儿的,结果查阅Gin文档发现这么个好东西File(),直接满足以上要求,甚至还对Windows做了适配,还带权限认证的......
func get(ctx *gin.Context) {
pd := ctx.Request.URL.String()
ctx.Status(http.StatusOK)
ctx.File(pd)
}
试请求根目录,结果如图:
任意点击一个目录ProgramData:
任意点击一个文件desktop.ini:
任意点击一个浏览器打不开的文件server.exe:
只能说,相信前人的智慧......