Go通过net/http和mime/multipart实现多文件上传,前端表单需设enctype="multipart/form-data"并添加multiple属性,后端用r.ParseMultipartForm()解析,遍历r.MultipartForm.File["files"]获取文件头,逐个打开并用io.Copy()写入磁盘,同时注意限制文件大小和关闭文件句柄。

在Web开发中,多文件上传是一个常见需求。Golang通过标准库net/http和mime/multipart提供了强大且灵活的支持,能够轻松实现安全、高效的多文件上传功能。下面介绍如何使用Golang处理多个文件上传的完整流程。
前端HTML表单需要设置enctype="multipart/form-data",并允许用户选择多个文件:
<form method="POST" action="/upload" enctype="multipart/form-data">
<input type="file" name="files" multiple>
<button type="submit">上传</button>
</form>
在Go服务端,使用r.ParseMultipartForm()解析请求。该方法会将文件和表单字段分别存储在r.MultipartForm.File和r.MultipartForm.Value中。
立即学习“go语言免费学习笔记(深入)”;
获取名为files的所有上传文件句柄:
fileHeaders := r.MultipartForm.File["files"]
然后遍历每个文件,打开并复制内容到服务器本地路径:
Metronic是一套精美的响应式后台管理模板,基于强大的Twitter Bootstrap框架实现。Metronic拥有简洁优雅的Metro UI风格界面,自适应屏幕分辨率大小,兼容PC端和手机移动端。全套模板,包含仪表盘、侧边栏菜单、布局宣传片、电子邮件模板、UI特性、按钮、标签、表格布局、表单组件、多文件上传、悬浮窗文件上传、时间表、博客、新闻、关于我们、联系我们、日历、用户配置文件、锁屏、
275
示例代码片段:
for _, fileHeader := range fileHeaders {
if fileHeader.Size > 10 http.Error(w, "文件太大", http.StatusBadRequest)
return
}
file, _ := fileHeader.Open()
defer file.Close()
out, _ := os.Create("./uploads/" + fileHeader.Filename)
defer out.Close()
io.Copy(out, file)
}
生产环境中必须考虑以下几点:
可以收集每个文件的处理状态(成功/失败原因),构造JSON响应返回给前端:
result := map[string]interface{}{"uploaded": []string{}, "errors": []string{}}
// 处理过程中追加结果
json.NewEncoder(w).Encode(result)
这样前端能清楚知道哪些文件上传成功,哪些失败。
基本上就这些。Golang处理多文件上传不复杂但容易忽略细节,关键是做好边界检查和错误处理。配合Nginx做静态文件代理,即可构建完整的文件服务模块。
以上就是Golang如何处理多文件上传_Golang 多文件上传实践的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号