您的位置:58编程 > go 静态文件 GoFrame 高级特性-静态文件服务

go 静态文件 GoFrame 高级特性-静态文件服务

2023-03-15 17:33 GoFrame教程

go 静态文件 GoFrame 高级特性-静态文件服务

go 静态文件

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 应用中集成静态文

GoFrame 高级特性-静态文件服务

静态文件服务配置

默认情况下,​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)

简要介绍:

  1. IndexFiles​为当访问目录时默认检索的文件名称列表(按照​slice​先后顺序进行检索),当检索的文件存在时则返回文件内容,否则展示目录列表(​SetIndexFolder​为​true​时),默认的​IndexFiles​为:​index.html​, ​index.htm​;
  2. SetIndexFolder​为设置是否在用户访问文件目录,且没有在目录下检索到​IndexFiles​时,则展示目录下的文件列表,默认为关闭;
  3. SetServerRoot​为设置默认提供服务的静态文件目录,该目录会被自动添加到​SearchPath​中的第一个搜索路径;
  4. AddSearchPath​为添加静态文件检索目录,可以有多个,按照文件目录添加的先后顺序执行优先级检索;
  5. AddStaticPath​为添加URI与目录路径的映射关系,可以自定义静态文件目录的访问URI规则;
  6. SetRewrite​/​SetRewriteMap​为重写规则设置(类似于​nginx​的​rewrite​),严格上来讲不仅仅是静态文件服务,当然也支持动态的路由注册的​rewrite​;

设置静态文件服务的目录路径时,可以使用绝对路径,也可以使用相对路径,例如设置当前运行目录提供静态文件服务可以使用​SetServerRoot(".")​。

开发者可以设置多个文件目录来提供静态文件服务,并且可以设置目录及​URI​的优先级,但是一旦通过​SetFileServerEnabled​关闭了静态服务,所有静态文件/目录的访问都将失效。

示例1, 基本使用

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()
}

示例2,静态目录映射

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()
}

示例3,静态目录映射,优先级控制

静态目录映射的优先级按照绑定的​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​冲突),将会无法被访问到。

示例4,URI重写

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()
}

执行后,

  1. 当我们访问 ​/test.html​ ,其实最终被重写到了 ​test1.html​,返回的是该文件内容;
  2. 当我们访问 ​/my-test1​ ,其实最终被重写到了 ​test1.html​,返回的是该文件内容;
  3. 当我们访问 ​/my-test2​ ,其实最终被重写到了 ​test2.html​,返回的是该文件内容;


阅读全文
以上是58编程为你收集整理的go 静态文件 GoFrame 高级特性-静态文件服务全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
© 2024 58编程 58biancheng.com 版权所有 联系我们
桂ICP备12005667号-32 Powered by CMS