发布时间:2024-11-22 00:25:53
下面是一个简单的例子:
```go package main import ( "log" "net/http" ) func main() { fileServer := http.FileServer(http.Dir("/path/to/files")) http.Handle("/", fileServer) log.Fatal(http.ListenAndServe(":8000", nil)) } ``` 以上代码会在本地的`8000`端口启动一个文件服务器,它将服务于`/path/to/files`目录下的所有文件。您可以根据实际情况修改该目录路径。1. 配置监听地址与端口号:
```go log.Fatal(http.ListenAndServe("127.0.0.1:8000", nil)) ``` 在此示例中,我们将文件服务器绑定到IP地址 `127.0.0.1` 和端口号 `8000`,这意味着该服务器只能从本地访问。2. 自定义URL路径:
```go http.Handle("/files/", http.StripPrefix("/files/", fileServer)) ``` 使用`http.StripPrefix()`函数,我们可以为我们的文件服务器定义自定义URL前缀。在此示例中,所有以`/files/`开头的URL都将被重定向到文件服务器。3. 支持HTTPS:
```go log.Fatal(http.ListenAndServeTLS(":8000", "cert.pem", "key.pem", nil)) ``` 以上代码将启动一个支持HTTPS协议的文件服务器。您需要通过自己的证书(`cert.pem`和`key.pem`)来配置HTTPS。4. 认证和授权:
```go func authHandler(handler http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { username, password, _ := r.BasicAuth() if username == "admin" && password == "password" { handler.ServeHTTP(w, r) } else { w.Header().Set("WWW-Authenticate", `Basic realm="Restricted"`) w.WriteHeader(http.StatusUnauthorized) w.Write([]byte("Unauthorized\n")) } }) } fileServer := http.FileServer(http.Dir("/path/to/files")) http.Handle("/", authHandler(fileServer)) ``` 在此示例中,我们使用了HTTP基本身份验证实现了一个简单的认证和授权机制。只有当请求中包含正确的用户名和密码时,才能访问文件服务器。