golang文件服务器的两种方式(可以访问任何目录)
一、方法1:
主要用到的方法是http包的FileServer,参数很简单,就是要路由的文件夹的路径。
package main import ( "fmt" "net/http" ) func main() { http.Handle("/", http.FileServer(http.Dir("./"))) e := http.ListenAndServe(":8080", nil) fmt.Println(e) }
上面例子的路由只能把根目录也就是“/”目录映射出来,例如你写成”http.Handle("/files", http.FileServer(http.Dir("./")))“,就无法把通过访问”/files“把当前路径下的文件映射出来。于是就有了http包的StripPrefix方法。
二、方法2:
实现访问任意文件夹下面的文件。
package main import ( "fmt" "net/http" ) func main() { mux := http.NewServeMux() mux.Handle("/", http.StripPrefix("/", http.FileServer(http.Dir("/")))) mux.Handle("/c/", http.StripPrefix("/c/", http.FileServer(http.Dir("c:")))) mux.Handle("/d/", http.StripPrefix("/d/", http.FileServer(http.Dir("d:")))) mux.Handle("/e/", http.StripPrefix("/e/", http.FileServer(http.Dir("e:")))) if err := http.ListenAndServe(":3008", mux); err != nil { log.Fatal(err) } }
这里生成了一个ServeMux,与文件服务器无关,可以先不用关注。用这种方式,就可以把任意文件夹下的文件路由出来了。
ps:golang实现的文件服务器
最近在学习golang,使用golang实现了一个最简单的文件服务器,程序只有简单的十多行代码,可以编译成windows, linux, mac多平台可执行文件。
源码
package main import ( "fmt" "net/http" "os" "path/filepath" ) func main() { p, _ := filepath.Abs(filepath.Dir(os.Args[0])) http.Handle("/", http.FileServer(http.Dir(p))) err := http.ListenAndServe(":8088", nil) if err != nil { fmt.Println(err) } }
源码解释
os.Args[0]获取的是执行程序时的第一个参数,默认第一个参数是程序所在的目录
filepath.Abs(filepath.Dir(os.Args[0]))是获取当前可执行程序所在的绝对路径
http.Handle("/", http.FileServer(http.Dir(p)))是开启一个文件服务器,使用当前可执行文件所在的路径
http.ListenAndServe(":8088", nil)是监听8088端口并开启文件服务器
编译
要将源码编译成不同平台的可执行文件,需要使用gox工具,使用下面的命令安装gox:
go get github.com/mitchellh/gox
执行成功之后,使用gox命令即可自动编译出各个平台的可执行文件,如果想为某个平台单独编译,可以使用如下方式:
gox -os "windows linux" -arch amd64
-os参数指定了编译平台,-arch参数指定了处理器架构
运行
直接打开编译出来的可执行程序,即可运行,在浏览器中访问http://ip:8088即可看到可执行文件所在的目录下的所有文件。
到此这篇关于golang文件服务器可以访问任何目录的文章就介绍到这了,更多相关golang文件服务器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- centos 通过http方式访问本地目录(文件服务器)
- 设置jetty的文件目录不可访问方式
- nodejs将任何文件夹变成一个可以访问的服务器
- 以命令方式从FTP 服务器下载文件到本地指定目录
- 使用C#WebClient类访问(上传/下载/删除/列出文件目录)由IIS搭建的http文件服务器
- C++服务器下载文件的两种方式
- cocos2dx中可以用两种方式输出日志文件
- subversion服务器两种配置方式所用的配置文件及格式
- Atitit poi读取大文件内存溢出的解决 目录 1. poi提供了两种读取excel的方式,一种是类似xml的Dom, 1 2. POI官网上提到XSSF有三种读写excel,POI地址 1 3
- unistd.h 中int access(const char * pathname, int mode); 判断进程能否以mode模式访问pathname文件(可以用来判断文件/目录是否存在)
- Nginx服务器中设置禁止访问文件或目录的方法
- HTTP 错误 404 - 文件或目录未找到 HTTP 错误 401.2 - 未经授权:访问由于服务器配置被拒绝
- EXECL导入(检查服务器版本.包括NPOI方式导入.可以通过配置文件信息导入EXECL)代码记录下.
- wp访问资源文件的两种方式
- 访问资源文件方式与访问工作目录
- 以命令方式从FTP 服务器下载文件到本地指定目录
- Atitit spirngboot 访问 html文件总结 自设计web服务器原理与实现 Url路由压力,读取url,获得项目更路径绝对路径,拼接为文件路径。读取文建内容输出即可 目录路径 u
- 【已解决】可以访问Tomcat下webapp中的文件目录(间接实现下载功能)
- samba 服务器共享目录不能访问,smbuser家目录可以访问。