需求
我想要实现一个轻量级,实现简单的一个web文件下载服务,就只提供通过浏览器访问能够下载服务器指定目录下的文件的功能即可。
代码实现
package main
import (
"flag"
"fmt"
"log"
"net/http"
"os"
"time"
)
var port string
var path string
func main() {
// 1. 可以从命令行接受参数
flag.StringVar(&port, "p", "8080", "Listen on port")
flag.StringVar(&path, "d", "/tmp/rpms", "The web root path")
// 2. 判断目录是否存在,不存在则创建
_, err := os.Stat(path)
if os.IsNotExist(err) {
if os.Mkdir(path, 0755) == nil {
fmt.Printf("Directory %v created successfully\n", path)
}
}
// FileServer返回一个使用FileSystem接口root提供文件访问服务的HTTP处理器
http.Handle("/", http.FileServer(http.Dir(path)))
flag.Parse()
s := &http.Server{
Addr: fmt.Sprintf(":%v", port),
ReadTimeout: 150 * time.Second,
}
fmt.Printf("Start the application and listen on port %v\n", port)
log.Fatal(s.ListenAndServe())
}
可指定选项
F:\go\rpmfile>go run file.go -h
Usage of C:\Users\46865\AppData\Local\Temp\go-build1495333115\b001\exe\file.exe:
-d string
The web root path (default "/tmp/rpms")
-p string
Listen on port (default "8080")
运行
F:\go\rpmfile>go run file.go
Start the application and listen on port 8080
浏览器访问
文档文件可以用过浏览器直接查看,其他文件点击即可下载
结语
- 我是用来实现yum自定义的repo仓库,通过实验是可用的,如果小伙伴有其他需求不妨试试
- 如果要制作在linux上或其他平台运行的可执行文件的话参考这里