在go文件服务器加入http.StripPrefix的用途介绍
作者:yyyzhhhhh 发布时间:2023-06-26 07:19:07
标签:go,服务器,http,StripPrefix
例子:
http.Handle("/tmpfiles/", http.StripPrefix("/tmpfiles/", http.FileServer(http.Dir("/tmp"))))
当访问localhost:xxxx/tmpfiles时,会路由到fileserver进行处理
当访问URL为/tmpfiles/example.txt时,fileserver会将/tmp与URL进行拼接,得到/tmp/tmpfiles/example.txt,而实际上example.txt的地址是/tmp/example.txt,因此这样将访问不到相应的文件,返回404 NOT FOUND。
因此解决方案就是把URL中的/tmpfiles/去掉,而http.StripPrefix做的就是这个。
补充:go语言实现一个简单的文件服务器 http.FileServer
代码如下:
package main
import (
"flag"
"fmt"
"github.com/julienschmidt/httprouter"
"log"
"net/http"
"strings"
"time"
)
func main() {
root := flag.String("p", "", "file server root directory")
flag.Parse()
if len(*root) == 0 {
log.Fatalln("file server root directory not set")
}
if !strings.HasPrefix(*root, "/") {
log.Fatalln("file server root directory not begin with '/'")
}
if !strings.HasSuffix(*root, "/") {
log.Fatalln("file server root directory not end with '/'")
}
p, h := NewFileHandle(*root)
r := httprouter.New()
r.GET(p, LogHandle(h))
log.Fatalln(http.ListenAndServe(":8080", r))
}
func NewFileHandle(path string) (string, httprouter.Handle) {
return fmt.Sprintf("%s*files", path), func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
http.StripPrefix(path, http.FileServer(http.Dir(path))).ServeHTTP(w, r)
}
}
func LogHandle(handle httprouter.Handle) httprouter.Handle {
return func(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
now := time.Now()
handle(w, r, p)
log.Printf("%s %s %s done in %v", r.RemoteAddr, r.Method, r.URL.Path, time.Since(now))
}
}
准备测试文件
编译运行
用浏览器访问
以上为个人经验,希望能给大家一个参考
来源:https://blog.csdn.net/a13602955218/article/details/106692668
0
投稿
猜你喜欢
- 以前看过有人转换过的,当时仅仅惊叹了一下,就过去了,没有记下来,直至于用到的时候呢,开始到处找,找来找去都没有找不到痕迹了,心里也就郁郁寡欢
- 当你用 ASP 编写服务器端应用程序时,必须依靠 ActiveX
- 上文:栅格:从混乱到秩序Jacci Howard Bear 的英文原文:http://desktoppub.about.com/od/gri
- 相信用过Gmail的人都知道Gmail有一个草稿自动保存的功能,每过一段时间,Gmail都会自动保存邮件草稿,这样在一些突 * 况下就能快速地
- ASP中从数据库读取二进制文件数据代码:<%driver_name1="DRIVER={Microsoft&n
- Css3引入了新的盒模型——弹性盒模型,该模型决定一个盒子在其他盒子中的分布方式以及如何处理可用的空间。这与XUL(火狐使用的用户交互语言)
- 代码如下:'******************************************** '函数名:I
- 如何最大限度地实现安全登录功能? 具体方法如下(这是一个程序,为便于说明,中间用虚线“------”将代
- 我想大家在用Sql2005一般都是.NET2005自带的SQL Server 2005是SQL Server2005 Express版本的,
- 在mysql网站时拿到的rpm包只能用root安装,不支持relocate用源码安装后./configure --prefix=/home/
- MySQL 提供了一个很有意思的Engine:Federated!如果你了解Linux下面的Link的话,就应该很好理解这个Federate
- 在Web 开发中,JavaScript的一个很重要的作用就是对DOM进行操作,可你知道么?对DOM的操作是非常昂贵的,因为这会导致浏览器执行
- python使用utf8编码,mysql也是utf8编码,是什么问题?后来查了一下,使用一个简单的办法即可:vsql = "ins
- 本文介绍了使用xmlhttp处理远程文件数据、或采集文章时,对对方网页编码的处理方法。因为使用ajax的xmlhttp网页编码处理不当很容易
- VBSCRIPT中的日期,时间,星期函数很丰富,给我们使用带来了很大的方便,我个人使用最多的就是用now()来获取服务器的当前日期和时间。但
- 本文介绍了使用XMlhttp技术来生成html页面,值得借鉴。相关函数:<% ’定义xmlhttp funct
- 对于个人站长来说,如何能使自己的网站与众不同、充满个性,一直是不懈努力的目标。除了尽量提高页面的视觉效
- “模板化”——这也许是视觉设计师通常最不愿意听到的概念,先入为主的会产生“批量生产”、“体力活儿”、“限制思维”等概念,总之都比较负面。但为
- 概述要访问一个变量的内容,可以直接使用其名称。如果该变量是一个数组,可以使用变量名称和关键字或索引的组合来访问其内容。像其他变量一样,使用运
- 【译者的话】我们曾经在《透视色轮》一文中探讨过色轮的构成及作用,但你可能更多的只是将其作为了解颜色关系的一个工具,却不一定将其作为实际设计中