go 文件服务器
时间: 2023-07-25 21:23:52 浏览: 43
你需要编写一个能够提供文件下载服务的Go语言文件服务器。你可以使用Go标准库中的`net/http`包来实现。具体来说,你需要编写一个HTTP处理函数,对于收到的HTTP GET请求,该处理函数会将请求的文件作为响应体返回给客户端。你还需要在服务器的命令行参数中指定文件服务器的根目录。
以下是一个简单的例子,演示如何使用Go语言实现一个文件服务器:
```go
package main
import (
"fmt"
"net/http"
"os"
)
func getFileHandler(root string) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
path := r.URL.Path
if path[0] == '/' {
path = path[1:]
}
file := root + "/" + path
f, err := os.Open(file)
if err != nil {
http.Error(w, err.Error(), http.StatusNotFound)
return
}
defer f.Close()
fi, err := f.Stat()
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
http.ServeContent(w, r, fi.Name(), fi.ModTime(), f)
}
}
func main() {
if len(os.Args) < 2 {
fmt.Println("Usage: fileserver <root>")
return
}
root := os.Args[1]
http.HandleFunc("/", getFileHandler(root))
fmt.Println("Starting file server on port 8080...")
err := http.ListenAndServe(":8080", nil)
if err != nil {
fmt.Println("Server error:", err)
}
}
```
在上述代码中,我们首先定义了一个`getFileHandler`函数,该函数根据请求的URL路径返回对应的文件内容。其中,我们通过调用`os.Open`函数打开文件,如果打开失败,则返回`http.StatusNotFound`状态码。如果成功打开文件,则调用`http.ServeContent`函数将文件内容作为响应体返回给客户端。
在`main`函数中,我们从命令行参数中获取文件服务器的根目录,并将其传递给`getFileHandler`函数。然后,我们将该函数注册为HTTP处理函数,并开始监听8080端口。