GO语言"net/http"包中"FileServer"函数的用法及代码示例。
用法:
func FileServer(root FileSystem) Handler
FileServer 返回一个处理 HTTP 请求的处理程序,文件系统的内容以根为根。
作为一种特殊情况,返回的文件服务器会将任何以 "/index.html" 结尾的请求重定向到相同的路径,而不是最终的 "index.html"。
要使用操作系统的文件系统实现,请使用 http.Dir:
http.Handle("/", http.FileServer(http.Dir("/tmp")))
要使用 fs.FS 实现,请使用 http.FS 对其进行转换:
http.Handle("/", http.FileServer(http.FS(fsys)))
例子:
package main
import (
"log"
"net/http"
)
func main() {
// Simple static webserver:
log.Fatal(http.ListenAndServe(":8080", http.FileServer(http.Dir("/usr/share/doc"))))
}
示例(DotFileHiding):
package main
import (
"io/fs"
"log"
"net/http"
"strings"
)
// containsDotFile reports whether name contains a path element starting with a period.
// The name is assumed to be a delimited by forward slashes, as guaranteed
// by the http.FileSystem interface.
func containsDotFile(name string) bool {
parts := strings.Split(name, "/")
for _, part := range parts {
if strings.HasPrefix(part, ".") {
return true
}
}
return false
}
// dotFileHidingFile is the http.File use in dotFileHidingFileSystem.
// It is used to wrap the Readdir method of http.File so that we can
// remove files and directories that start with a period from its output.
type dotFileHidingFile struct {
http.File
}
// Readdir is a wrapper around the Readdir method of the embedded File
// that filters out all files that start with a period in their name.
func (f dotFileHidingFile) Readdir(n int) (fis []fs.FileInfo, err error) {
files, err := f.File.Readdir(n)
for _, file := range files { // Filters out the dot files
if !strings.HasPrefix(file.Name(), ".") {
fis = append(fis, file)
}
}
return
}
// dotFileHidingFileSystem is an http.FileSystem that hides
// hidden "dot files" from being served.
type dotFileHidingFileSystem struct {
http.FileSystem
}
// Open is a wrapper around the Open method of the embedded FileSystem
// that serves a 403 permission error when name has a file or directory
// with whose name starts with a period in its path.
func (fsys dotFileHidingFileSystem) Open(name string) (http.File, error) {
if containsDotFile(name) { // If dot file, return 403 response
return nil, fs.ErrPermission
}
file, err := fsys.FileSystem.Open(name)
if err != nil {
return nil, err
}
return dotFileHidingFile{file}, err
}
func main() {
fsys := dotFileHidingFileSystem{http.Dir(".")}
http.Handle("/", http.FileServer(fsys))
log.Fatal(http.ListenAndServe(":8080", nil))
}
示例(StripPrefix):
package main
import (
"net/http"
)
func main() {
// To serve a directory on disk (/tmp) under an alternate URL
// path (/tmpfiles/), use StripPrefix to modify the request
// URL's path before the FileServer sees it:
http.Handle("/tmpfiles/", http.StripPrefix("/tmpfiles/", http.FileServer(http.Dir("/tmp"))))
}
相关用法
- GO FileMode用法及代码示例
- GO FieldsFunc用法及代码示例
- GO FixedZone用法及代码示例
- GO Fields用法及代码示例
- GO Fscanln用法及代码示例
- GO Float.SetString用法及代码示例
- GO Fprintln用法及代码示例
- GO FormatMediaType用法及代码示例
- GO Float64s用法及代码示例
- GO Fprintf用法及代码示例
- GO Fprint用法及代码示例
- GO Floor用法及代码示例
- GO FormatUint用法及代码示例
- GO FormatBool用法及代码示例
- GO Float64sAreSorted用法及代码示例
- GO Float.Scan用法及代码示例
- GO FormatFloat用法及代码示例
- GO FullRune用法及代码示例
- GO FullRuneInString用法及代码示例
- GO Float.Add用法及代码示例
注:本文由纯净天空筛选整理自golang.google.cn大神的英文原创作品 FileServer。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。