登录
首页 >  Golang >  Go教程

Golang文件上传下载实现教程

时间:2025-10-20 18:06:31 313浏览 收藏

本文详细介绍了如何使用 Golang 实现文件上传与下载功能,并针对百度 SEO 进行了优化。文章重点讲解了如何利用 Go 语言标准库中的 `net/http` 和 `os` 包,通过简单的 HTTP 处理函数,实现常见的文件传输功能。在文件上传方面,文章深入解析了如何解析 `multipart/form-data` 数据,并提供了服务端代码示例,展示了如何限制上传文件的大小,以及如何将上传的文件保存到服务器。无论你是 Golang 初学者还是有一定经验的开发者,本文都能帮助你快速掌握 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学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

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