gf/example/httpserver/serve-file/main.go

46 lines
818 B
Go
Raw Normal View History

2024-01-02 20:19:40 +08:00
package main
import (
"net/http"
"strings"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
)
// pathMap is used for URL mapping
var pathMap = map[string]string{
"/aaa/": "/tmp/",
}
// ServeFile serves the file to the response.
func ServeFile(r *ghttp.Request) {
truePath := r.URL.Path
hasPrefix := false
// Replace the path prefix.
for k, v := range pathMap {
if strings.HasPrefix(truePath, k) {
truePath = strings.Replace(truePath, k, v, 1) // Replace only once.
hasPrefix = true
break
}
}
if !hasPrefix {
r.Response.WriteStatus(http.StatusForbidden)
return
}
r.Response.ServeFile(truePath)
}
func main() {
s := g.Server()
s.Use(ghttp.MiddlewareHandlerResponse)
s.BindHandler("/*", ServeFile)
s.SetPort(8080)
s.Run()
}
// http://127.0.0.1:8080/aaa/main.go