登录
首页 >  Golang >  Go教程

Golang文件上传下载实现教程

时间:2025-11-24 12:50:39 407浏览 收藏

本文详细介绍了如何使用 Golang 实现文件上传与下载功能,并针对百度 SEO 进行了优化。文章深入探讨了利用 Go 语言标准库 `net/http` 和 `os` 包,构建高效稳定的文件传输服务的方法。重点讲解了文件上传过程中 `multipart/form-data` 数据的解析,以及如何限制上传文件大小,确保服务器安全。通过服务端代码示例,读者可以快速掌握如何处理 POST 请求,并安全地将上传文件保存到服务器。无论您是 Golang 初学者还是有一定经验的开发者,本文都能为您提供清晰易懂的指导,助力您轻松实现文件上传下载功能。

Go语言通过net/http和os包实现文件上传下载;2. 上传时解析multipart/form-data数据,限制请求大小并保存文件。

Golang如何实现文件上传与下载

Go语言实现文件上传与下载非常直观,主要依赖标准库中的 net/httpos 包。通过简单的HTTP处理函数,就能完成常见的文件传输功能。

文件上传(客户端→服务端)

实现文件上传的关键是解析HTTP请求中的 multipart/form-data 数据。前端通常使用表单提交文件,后端用 Go 解析并保存到服务器。

服务端代码示例:

func uploadHandler(w http.ResponseWriter, r *http.Request) { if r.Method != "POST" { http.Error(w, "只支持 POST 请求", http.StatusMethodNotAllowed) return } // 限制上传大小(例如 10MB) r.ParseMultipartForm(10

说明: 前端表单需设置 enctype="multipart/form-data",字段名为 "file"。服务端通过 FormFile 获取文件句柄,并写入本地磁盘。

文件下载(服务端→客户端)

实现文件下载的核心是设置正确的响应头,告诉浏览器这是一个附件,应触发下载行为。

func downloadHandler(w http.ResponseWriter, r *http.Request) { filename := r.URL.Query().Get("file") filepath := "./uploads/" + filename // 检查文件是否存在 if _, err := os.Stat(filepath); os.IsNotExist(err) { http.Error(w, "文件不存在", http.StatusNotFound) return } // 设置响应头 w.Header().Set("Content-Disposition", "attachment; filename="+filename) w.Header().Set("Content-Type", "application/octet-stream") // 读取并发送文件 http.ServeFile(w, r, filepath) }

说明: 使用 Content-Disposition: attachment 强制浏览器下载而非预览。配合 http.ServeFile 高效输出文件流。

完整路由配置示例

func main() { os.MkdirAll("./uploads", os.ModePerm) http.HandleFunc("/upload", uploadHandler) http.HandleFunc("/download", downloadHandler) http.ListenAndServe(":8080", nil) }

启动服务后:

  • 上传:POST 请求发送到 /upload,携带文件字段
  • 下载:GET 请求访问 /download?file=xxx.jpg

安全与优化建议

实际使用中还需注意:

  • 校验文件类型(如检查 MIME 头),防止恶意上传
  • 重命名文件避免路径穿越或覆盖(例如使用 UUID)
  • 限制文件大小和并发连接数
  • 添加身份验证中间件保护接口
基本上就这些。Go 的标准库足够支撑基础的文件传输需求,无需引入额外框架。

以上就是《Golang文件上传下载实现教程》的详细内容,更多关于的资料请关注golang学习网公众号!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>