Go语言通过net/http和os包实现文件上传下载,首先创建HTML表单提交文件,后端用r.FormFile获取文件并io.Copy保存;下载时设置Content-Disposition头,用http.ServeFile输出文件。1. 上传:前端使用multipart/form-data表单,后端解析文件并存储至指定目录。2. 下载:校验文件存在后设置响应头触发浏览器下载。3. 安全建议包括限制文件大小、校验MIME类型、重命名文件及设置目录权限。4. 总结指出功能简洁但需注意细节处理。

Go语言实现文件上传下载功能非常直观,主要依赖标准库中的 net/http 和 os 包。通过简单的HTTP处理函数即可完成前后端交互的文件传输操作。下面以实际示例说明如何在Golang中实现文件的上传与下载。
文件上传功能实现
文件上传通常通过表单提交,前端使用 multipart/form-data 编码方式发送文件,后端解析请求并保存到服务器指定目录。
1. 前端HTML表单示例:
2. 后端处理文件上传:
立即学习“go语言免费学习笔记(深入)”;
在Go中使用 r.FormFile() 获取上传的文件句柄,并用 io.Copy 将内容写入本地文件。
package mainimport ( "io" "net/http" "os")func uploadHandler(w http.ResponseWriter, r *http.Request) { if r.Method != "POST" { http.Error(w, "只允许POST请求", http.StatusMethodNotAllowed) return } file, header, err := r.FormFile("file") if err != nil { http.Error(w, "无法获取文件", http.StatusBadRequest) return } defer file.Close() // 创建本地文件 outFile, err := os.Create("./uploads/" + header.Filename) if err != nil { http.Error(w, "无法创建文件", http.StatusInternalServerError) return } defer outFile.Close() // 复制文件内容 _, err = io.Copy(outFile, file) if err != nil { http.Error(w, "文件保存失败", http.StatusInternalServerError) return } w.WriteHeader(http.StatusOK) w.Write([]byte("文件上传成功"))}func main() { // 确保上传目录存在 os.MkdirAll("./uploads", os.ModePerm) http.HandleFunc("/upload", uploadHandler) http.Handle("/", http.FileServer(http.Dir("."))) // 提供HTML页面 http.ListenAndServe(":8080", nil)}
文件下载功能实现
文件下载是通过设置响应头告知浏览器以附件形式处理,并将本地文件内容输出到响应体。
实现步骤:
检查请求的文件是否存在 设置 Content-Disposition 头部指定下载文件名 设置 Content-Type 为 application/octet-stream 使用 http.ServeFile 直接输出文件内容
func downloadHandler(w http.ResponseWriter, r *http.Request) { filename := r.URL.Query().Get("file") if filename == "" { http.Error(w, "缺少文件名参数", http.StatusBadRequest) return } 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)}
注册路由:
http.HandleFunc("/download", downloadHandler)
访问 /download?file=test.txt 即可触发文件下载。
安全与优化建议
在生产环境中使用时,需注意以下几点:
限制上传文件大小:使用 r.ParseMultipartForm(maxSize) 防止内存溢出 校验文件类型:通过 magic number 判断真实MIME类型,避免伪造扩展名 重命名上传文件:防止路径穿越或覆盖关键文件 设置权限:上传目录禁止执行权限,防止恶意脚本运行
总结
Go通过 net/http 提供了简洁高效的文件上传下载支持。核心在于正确处理 multipart 请求和响应头设置。配合基础的文件操作,即可快速搭建可靠的文件服务。基本上就这些,不复杂但容易忽略细节。
以上就是Golang如何实现文件上传下载功能_Golang 文件上传下载操作示例的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1427617.html
微信扫一扫
支付宝扫一扫