发布时间:2024-11-21 21:07:07
首先,在开始设置之前,我们需要导入一些必要的包。
``` import ( "net/http" // 其他所需的包 ) ```接下来,我们需要定义一个处理函数,用于处理上传和下载操作。
```go func handleFile(w http.ResponseWriter, r *http.Request) { switch r.Method { case "GET": // 处理文件下载请求 case "POST": // 处理文件上传请求 } } ```对于文件下载,我们需要根据用户请求的URL路径来确定要下载的文件,然后使用`http.ServeFile`函数将文件发送给客户端。
```go func handleFile(w http.ResponseWriter, r *http.Request) { // ... // 获取请求的文件名 fileName := r.URL.Path[1:] // 打开文件 file, err := os.Open(fileName) if err != nil { // 处理文件不存在的情况 http.NotFound(w, r) return } defer file.Close() // 发送文件给客户端 http.ServeContent(w, r, "", time.Now(), file) } ```对于文件上传,我们可以使用Golang的`multipart`包来处理表单数据,将文件保存到指定的路径。
```go func handleFile(w http.ResponseWriter, r *http.Request) { // ... // 解析表单 err := r.ParseMultipartForm(32 << 20) // 限制上传文件的最大大小为32MB if err != nil { // 处理解析错误的情况 http.Error(w, err.Error(), http.StatusInternalServerError) return } // 获取上传的文件 file, handler, err := r.FormFile("file") if err != nil { // 处理文件获取失败的情况 http.Error(w, err.Error(), http.StatusInternalServerError) return } defer file.Close() // 创建文件 f, err := os.OpenFile(handler.Filename, os.O_WRONLY|os.O_CREATE, 0666) if err != nil { // 处理文件创建失败的情况 http.Error(w, err.Error(), http.StatusInternalServerError) return } defer f.Close() // 将文件内容复制到目标文件中 io.Copy(f, file) // 返回成功的响应 w.Write([]byte("File uploaded successfully!")) } ```最后,我们需要设置路由,并启动服务器。
```go func main() { // 设置处理函数 http.HandleFunc("/", handleFile) // 启动服务器 http.ListenAndServe(":8080", nil) } ```现在,当我们访问`http://localhost:8080/yourfile.zip`时,服务器将返回`yourfile.zip`文件;当我们向`http://localhost:8080/upload`发送POST请求并附带一个名为`file`的文件字段的时候,服务器将接收并保存该文件。
总结:
使用Golang设置文件服务器非常简单。通过导入必要的包、定义处理函数、实现文件下载和文件上传的逻辑,并设置路由和启动服务器,我们就可以搭建一个简单而功能强大的文件服务器了。
参考链接: