合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
通过 `Party.HandleDir` 方法可以从特定目录(系统物理目录或嵌入式应用程序)中加载静态文件。 `HandleDir` 注册一个处理程序,该处理程序使用文件系统的内容(物理或嵌入式)为 HTTP 请求提供服务。 * 第一个参数:路由 * 第二个参数:需要提供服务的系统或嵌入式目录 * 第三个参数:不是必需的,目录选项,设置字段是可选的。 返回 GET *Route。 ``` HandleDir(requestPath, directory string, opts ...DirOptions) (getRoute *Route) ``` `DirOptions` 结构如下所示: ``` type DirOptions struct { // 默认为 "/index.html", 如果请求以 **/*/$IndexName 结尾 // 当重定向到另一个处理程序正在处理的 **/*(/) 路由 // 框架自动注册了另一个称为索引处理程序的处理程序 // 如果最终开发人员无法手动/手动处理。 IndexName string // 是否应在gzip压缩下提供文件? Gzip bool // 如果未找到 `IndexName`,列出当前请求目录中的文件 ShowList bool // 如果 `ShowList` 为 true , 则将使用此函数 // 的默认值之一,以显示当前请求的目录(dir)的文件列表。 DirList func(ctx iris.Context, dirName string, dir http.File) error // 当嵌入时。 Asset func(name string) ([]byte, error) AssetInfo func(name string) (os.FileInfo, error) AssetNames func() []string // 循环遍历每个找到的请求资源的可选验证器。 AssetValidator func(ctx iris.Context, name string) bool } ``` 让我们假设你由一个可执行的 ` ./assets` 文件夹 并且你想要通过`http://localhost:8080/static/**/*` 路由来访问这个文件夹。 ``` app := iris.New() app.HandleDir("/static", "./assets") app.Run(iris.Addr(":8080")) ``` 现在,如果你想将静态文件嵌入可执行文件内部以不依赖于系统目录,则可以使用 [go-bindata](https://github.com/go-bindata/go-bindata) 将文件转换为程序内的`[]byte`。让我们快速学习一下,以及 Iris 如何帮助提供这些数据。 安装 go-bindata: ``` go get -u github.com/go-bindata/go-bindata/... ``` 进入你的程序目录,并确保里面存在的 `./ assets` 子目录,并执行如下命令: ``` $ go-bindata ./assets/... ``` 上面创建了一个生成的 go 文件,其中包含三个主要功能:`Asset`, `AssetInfo` 和 `AssetNames`.。在 `DirOptions`上使用它们: ``` // [app := iris.New...] app.HandleDir("/static", "./assets", iris.DirOptions { Asset: Asset, AssetInfo: AssetInfo, AssetNames: AssetNames, Gzip: false, }) ``` 构建你的应用程序: ``` $ go build ``` `HandleDir` 支持物理目录和嵌入式目录的所有标准,包括内容范围。 但是,如果只需要一个处理程序来使用而无需注册路由,则可以改用 `iris.FileServer` 包级函数。 `FileServer` f函数返回一个处理程序,该处理程序为来自特定系统,物理目录,嵌入式目录的文件提供服务。 * 第一个参数:是目录。 * 第二个参数: 可选参数是任何可以被调用的可选设置 ``` iris.FileServer(directory string, options ...DirOptions) ``` 使用方法 ``` handler := iris.FileServer("./assets", iris.DirOptions { ShowList: true, Gzip: true, IndexName: "index.html", }) ``` 可以在以下位置找到示例:https://github.com/kataras/iris/tree/master/_examples/file-server