diff --git a/TODO b/TODO index 3090b1a52..9dbebd207 100644 --- a/TODO +++ b/TODO @@ -22,7 +22,7 @@ ghttp路由功能增加分组路由特性; ghttp增加返回数据压缩机制; 检查windows下的平滑重启失效问题; gview中的template标签失效问题; -ghttp静态文件服务改进(特别是403返回状态的修改); +gfile文件stat信息使用gfsnotify进行缓存更新改进; @@ -60,3 +60,4 @@ DONE: 31. gvalid包增加struct tag的校验规则、自定义错误提示信息绑定的支持特性; 32. 增加文件缓存包,可根据fsnotify机制进行缓存更新; 33. *any/:name路由匹配路由改进支持不带名字的*/:路由规则; +34. ghttp静态文件服务改进(特别是403返回状态的修改); diff --git a/g/net/ghttp/ghttp_server.go b/g/net/ghttp/ghttp_server.go index f7a789f33..0a46a3722 100644 --- a/g/net/ghttp/ghttp_server.go +++ b/g/net/ghttp/ghttp_server.go @@ -232,15 +232,14 @@ func (s *Server) Start() error { return errors.New("server is already running") } - // 如果设置了静态文件目录,那么严格按照静态文件目录进行检索 - // 否则,默认使用当前可执行文件目录,并且如果是开发环境,默认也会添加main包的源码目录路径做为二级检索 + // 如果设置了静态文件目录,那么优先按照静态文件目录进行检索,其次是当前可执行文件工作目录; + // 并且如果是开发环境,默认也会添加main包的源码目录路径做为二级检索。 if s.config.ServerRoot != "" { s.paths.Set(s.config.ServerRoot) - } else { - s.paths.Set(gfile.SelfDir()) - if p := gfile.MainPkgPath(); gfile.Exists(p) { - s.paths.Add(p) - } + } + s.paths.Add(gfile.SelfDir()) + if p := gfile.MainPkgPath(); gfile.Exists(p) { + s.paths.Add(p) } // 底层http server配置 diff --git a/g/net/ghttp/ghttp_server_config.go b/g/net/ghttp/ghttp_server_config.go index b390b2017..5a2bd7a98 100644 --- a/g/net/ghttp/ghttp_server_config.go +++ b/g/net/ghttp/ghttp_server_config.go @@ -347,6 +347,11 @@ func (s *Server) SetNameToUriType(t int) { s.nameToUriType.Set(t) } +// 添加静态文件搜索目录,必须给定目录的绝对路径 +func (s *Server) AddSearchPath(path string) error { + return s.paths.Add(path) +} + // 获取日志写入的回调函数 func (s *Server) GetLogHandler() func(r *Request, error ... interface{}) { if v := s.logHandler.Val(); v != nil { diff --git a/g/net/ghttp/ghttp_server_handler.go b/g/net/ghttp/ghttp_server_handler.go index 5eb0cc552..42c368d30 100644 --- a/g/net/ghttp/ghttp_server_handler.go +++ b/g/net/ghttp/ghttp_server_handler.go @@ -140,10 +140,11 @@ func (s *Server)callServeHandler(h *handlerItem, r *Request) { } } -// http server静态文件处理 +// http server静态文件处理,path必须为完整的**绝对路径** func (s *Server)serveFile(r *Request, path string) { f, err := os.Open(path) - if err != nil { + if os.IsExist(err) { + r.Response.WriteStatus(http.StatusNotFound) return } info, _ := f.Stat()