登录
首页 >  Golang >  Go教程

Golang如何上传文件到HTTP服务器

时间:2025-12-13 15:00:40 102浏览 收藏

推广推荐
免费电影APP ➜
支持 PC / 移动端,安全直达

哈喽!今天心血来潮给大家带来了《Golang上传文件到HTTP服务器方法》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

Go 语言上传文件需用 net/http 和 mime/multipart 构造 multipart/form-data 请求:先创建表单、写文本字段、用 CreateFormFile 添加文件(传原始文件名)、设置 Content-Type 为 FormDataContentType(),再发送请求并处理响应。

如何使用Golang上传文件到HTTP服务器_Golangmultipart File文件上传方法

Go 语言上传文件到 HTTP 服务器,核心是使用 net/httpmime/multipart 包构造 multipart/form-data 请求。关键在于正确创建表单、写入文件字段、设置 Content-Type,并处理响应。

构建 multipart 表单并写入文件

先用 multipart.Writer 创建表单,调用 WriteField 写普通字段(如 token),再用 CreateFormFile 创建文件字段——它会自动写入 Content-Disposition 头和文件名。注意:文件名必须是原始文件名(非路径),否则服务端可能解析失败。

  • 打开本地文件:f, err := os.Open("report.pdf")
  • 创建表单:w := multipart.NewWriter(buf)
  • 写文本字段:w.WriteField("user_id", "123")
  • 创建文件字段:fw, _ := w.CreateFormFile("file", "report.pdf")
  • 拷贝内容:io.Copy(fw, f)

发起 POST 请求并设置 Header

将表单数据(buf.Bytes())作为请求体,用 http.Posthttp.Client.Do 发送。务必设置 Content-Typew.FormDataContentType(),这是 multipart 的边界字符串(boundary)所在,不能手写或硬编码。

  • 获取正确的类型:contentType := w.FormDataContentType()
  • 构造请求:req, _ := http.NewRequest("POST", "https://api.example.com/upload", buf)
  • 设置头:req.Header.Set("Content-Type", contentType)
  • 发送:client := &http.Client{}; resp, err := client.Do(req)

处理服务端响应与错误

检查 resp.StatusCode 是否为 200/201;读取响应体前确保 resp.Body 被关闭;若服务端返回 JSON,可用 json.Decode 解析。常见错误包括:400(表单字段名不匹配)、413(文件超限)、500(服务端异常)。

  • 延迟关闭:defer resp.Body.Close()
  • 读取结果:body, _ := io.ReadAll(resp.Body)
  • 判断状态:if resp.StatusCode != http.StatusOK { log.Fatal("upload failed:", resp.Status) }

上传多个文件或混合字段的技巧

同一个表单可多次调用 CreateFormFile 添加多个文件,字段名可相同(如 "files")以支持数组式接收;也可混用 WriteFieldCreateFormField 传结构化数据(如 JSON 字符串)。

  • 多文件同名:w.CreateFormFile("files", "a.jpg"); w.CreateFormFile("files", "b.png")
  • 传 JSON 元数据:w.WriteField("meta", `{"desc":"test","tags":["go"]}`)
  • 避免内存爆炸:大文件建议用 io.Pipe 流式上传,而非全部加载进 bytes.Buffer

基本上就这些。Golang 文件上传不复杂但容易忽略 boundary 和字段名一致性,只要表单构造正确、Content-Type 匹配、服务端接口文档对得上,成功率很高。

终于介绍完啦!小伙伴们,这篇关于《Golang如何上传文件到HTTP服务器》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

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