首先使用r.ParseMultipartForm设置内存限制并解析表单数据,再通过r.MultipartForm.File获取文件句柄,调用formFile.Open()获得io.ReadCloser,最后用io.Copy将内容写入目标位置。

在 Golang 中实现文件上传到服务器,核心是通过 HTTP 协议处理 multipart 表单数据。同时,为了提升性能和稳定性,需要对内存使用、并发处理和超时控制进行优化。下面从基础实现到性能调优逐步说明。
Go 的标准库 net/http 提供了完整的 multipart 解析支持,可以直接读取上传的文件。
基本步骤如下:
func uploadHandler(w http.ResponseWriter, r *http.Request) {
// 解析 multipart 表单,限制内存部分为 32MB
err := r.ParseMultipartForm(32 << 20)
if err != nil {
http.Error(w, "解析表单失败", http.StatusBadRequest)
return
}
file, handler, err := r.FormFile("file")
if err != nil {
http.Error(w, "获取文件失败", http.StatusBadRequest)
return
}
defer file.Close()
// 创建本地文件
dst, err := os.Create("./uploads/" + handler.Filename)
if err != nil {
http.Error(w, "创建文件失败", http.StatusInternalServerError)
return
}
defer dst.Close()
// 复制文件内容
_, err = io.Copy(dst, file)
if err != nil {
http.Error(w, "保存文件失败", http.StatusInternalServerError)
return
}
w.Write([]byte("文件上传成功"))
}
使用 Go 发起文件上传请求,需手动构造 multipart 请求体。
立即学习“go语言免费学习笔记(深入)”;
大文件或高并发场景下,需注意资源使用和响应效率。
生产环境部署时还需关注以下几点:
以上就是Golang 文件上传到服务器怎么实现_Golang HTTP 文件传输与性能优化的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号