Go 语言是一种强大的编程语言,它可以用来开发各种应用程序。Go 语言提供了一个非常有用的功能,即静态文件处理。
静态文件是指不会改变的文件,例如图像、CSS 样式表、JavaScript 脚本和字体文件。Go 语言提供了一个内置的 http.FileServer 功能,可以帮助我们处理静态文件。它允许我们将静态文件放在特定的目录中,然后使用 http.FileServer 方法来处理这些文件。
http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
上面的代码将所有 /static/ 开头的 URL 都映射到 static 目录中,并使用 http.FileServer 方法来处理这些 URL。这样,我们就可以在 Go 的 Web 应用中使用静态文件了。
此外,Go 还提供了一个 ServeContent() 方法来处理特定内容类型的静态文件。该方法允许我们根据不同的内容类型来处理不同的文件,而不必将所有文件放在同一个目录中。
http.HandleFunc("/image/", func(w http.ResponseWriter, r *http.Request) { http.ServeContent(w, r, "image1.jpg", time.Now(), bytes.NewReader(image))})
上面的代码将 /image/ 开头的 URL 都映射到 image1.jpg 文件上,并使用 ServeContent() 方法来处理这些 URL。这样就可以根据不同内容类型来处理不同的文件了。
因此,Go 语言提供了很好地方式来处理静态文件:http.FileServer 和 ServeContent() 方法都可帮助我们快速、有效地处理静态文件。通过使用这两个方法,我们可快速、有效地将 Go 的 Web 应用中集成静态文
默认情况下,gf Server
关闭了静态文件服务的功能,如果开发者配置了静态文件目录,那么静态文件服务将会自动开启。
静态文件服务涉及到的常用配置方法如下:
// 设置http server参数 - ServerRoot
func (s *Server) SetServerRoot(root string)
// 添加静态文件搜索目录,必须给定目录的绝对路径
func (s *Server) AddSearchPath(path string)
// 设置http server参数 - IndexFiles,默认展示文件,如:index.html, index.htm
func (s *Server) SetIndexFiles(index []string)
// 是否允许展示访问目录的文件列表
func (s *Server) SetIndexFolder(enabled bool)
// 添加URI与静态目录的映射
func (s *Server) AddStaticPath(prefix string, path string)
// 静态文件服务总开关:是否开启/关闭静态文件服务
func (s *Server) SetFileServerEnabled(enabled bool)
// 设置URI重写规则
func (s *Server) SetRewrite(uri string, rewrite string)
// 设置URI重写规则(批量)
func (s *Server) SetRewriteMap(rewrites map[string]string)
简要介绍:
IndexFiles
为当访问目录时默认检索的文件名称列表(按照slice
先后顺序进行检索),当检索的文件存在时则返回文件内容,否则展示目录列表(SetIndexFolder
为true
时),默认的IndexFiles
为:index.html
, index.htm
;
SetIndexFolder
为设置是否在用户访问文件目录,且没有在目录下检索到IndexFiles
时,则展示目录下的文件列表,默认为关闭;
SetServerRoot
为设置默认提供服务的静态文件目录,该目录会被自动添加到SearchPath
中的第一个搜索路径;
AddSearchPath
为添加静态文件检索目录,可以有多个,按照文件目录添加的先后顺序执行优先级检索;
AddStaticPath
为添加URI与目录路径的映射关系,可以自定义静态文件目录的访问URI规则;
SetRewrite
/SetRewriteMap
为重写规则设置(类似于nginx
的rewrite
),严格上来讲不仅仅是静态文件服务,当然也支持动态的路由注册的rewrite
;设置静态文件服务的目录路径时,可以使用绝对路径,也可以使用相对路径,例如设置当前运行目录提供静态文件服务可以使用SetServerRoot(".")
。
开发者可以设置多个文件目录来提供静态文件服务,并且可以设置目录及URI
的优先级,但是一旦通过SetFileServerEnabled
关闭了静态服务,所有静态文件/目录的访问都将失效。
package main
import "github.com/gogf/gf/v2/frame/g"
// 静态文件服务器基本使用
func main() {
s := g.Server()
s.SetIndexFolder(true)
s.SetServerRoot("/Users/john/Temp")
s.AddSearchPath("/Users/john/Documents")
s.SetPort(8199)
s.Run()
}
package main
import "github.com/gogf/gf/v2/frame/g"
// 静态文件服务器,支持自定义静态目录映射
func main() {
s := g.Server()
s.SetIndexFolder(true)
s.SetServerRoot("/Users/john/Temp")
s.AddSearchPath("/Users/john/Documents")
s.AddStaticPath("/my-doc", "/Users/john/Documents")
s.SetPort(8199)
s.Run()
}
静态目录映射的优先级按照绑定的URI
精准度进行控制,绑定的URI
越精准(深度优先匹配),那么优先级越高。
package main
import "github.com/gogf/gf/v2/frame/g"
// 静态文件服务器,支持自定义静态目录映射
func main() {
s := g.Server()
s.SetIndexFolder(true)
s.SetServerRoot("/Users/john/Temp")
s.AddSearchPath("/Users/john/Documents")
s.AddStaticPath("/my-doc", "/Users/john/Documents")
s.AddStaticPath("/my-doc/test", "/Users/john/Temp")
s.SetPort(8199)
s.Run()
}
其中,访问/my-doc/test
的优先级会比/my-doc
高,因此假如/Users/john/Documents
目录下存在test
目录(与自定义的/my-doc/test
冲突),将会无法被访问到。
gf
框架的静态文件服务支持将任意的URI
重写,替换为制定的URI
,使用SetRewrite
/SetRewriteMap
方法。
示例,在/Users/john/Temp
目录下只有两个文件test1.html
及test2.html
。
package main
import "github.com/gogf/gf/v2/frame/g"
func main() {
s := g.Server()
s.SetServerRoot("/Users/john/Temp")
s.SetRewrite("/test.html", "/test1.html")
s.SetRewriteMap(g.MapStrStr{
"/my-test1": "/test1.html",
"/my-test2": "/test2.html",
})
s.SetPort(8199)
s.Run()
}
执行后,
/test.html
,其实最终被重写到了 test1.html
,返回的是该文件内容;
/my-test1
,其实最终被重写到了 test1.html
,返回的是该文件内容;
/my-test2
,其实最终被重写到了 test2.html
,返回的是该文件内容;使用goframe框架进行websocket开发相当简单。我们以下通过实现一个简单的echo服务器来演示goframe框架的webso...
获取Query参数在Gin框架中,可以通过Query来获取URL中?后面所携带的参数。例如/name=adminpwd=123456。获取方法如下package...
func main() {r := gin.Default()// gin.H 是 map[string]interface{} 的一种快捷方式r.GET("/someJSON", func(c *gin.Context) ...
使用Response参数您可以Response在路径操作函数中声明类型参数。然后您可以在该时间响应对象中设置 cookie。from fastapi import...
您可以在JSON模式中定义额外的信息。一个常见的用例是添加一个将在文档中显示的example。有几种方法可以声明额外的 JSON 模式信...
FastAPI 支持同时使用File和Form定义文件和表单字段。说明接收上传文件或表单数据,要预先安装python-multipart。例如,pip inst...
通过向规则参数添加变量部分,可以动态构建URL。此变量部分标记为variable-name。它作为关键字参数传递给与规则相关联的函数。在...
Web API 的工作通常与 HTTP 动词紧密相关,所以这使得实现这样一个基于MethodView类的 API 很有意义。也就是说,你会注意到 ...
为了在请求/响应周期之外测试基于类的视图,你必须确保它们配置正确,在实例化之后调用 setup()。例如,假设基于类的视图如...