Go语言通过net/http和multipart解析实现文件上传,需设置表单enctype为multipart/form-data,服务端用r.ParseMultipartForm解析并调用r.FormFile获取文件句柄。

在Go语言中实现文件上传功能,主要依赖标准库中的 net/http 和文件操作相关包。通过解析HTTP请求中的 multipart 表单数据,可以接收客户端上传的文件,并将其保存到服务器指定路径。以下是具体实现步骤和示例代码。
HTML表单需要设置 enctype="multipart/form-data",以便正确传输文件数据。Go服务端使用 r.ParseMultipartForm() 解析请求,然后通过 r.FormFile() 获取上传的文件句柄。
示例HTML表单:
<form enctype="multipart/form-data" action="/upload" method="post"> <input type="file" name="myfile" /> <input type="submit" value="上传" /> </form>
对应的Go服务端处理函数:
立即学习“go语言免费学习笔记(深入)”;
新浪微博登录ecshop这类的功能就显得很有必要了把login整个文件夹传到服务器上ecshop安装所在的目录,如果路径不对可以会导致应用失败。 需要修改的文件:config.php callback.php可以修改第27行的邮箱域名为你的网站域名。 别的不用改,否则会导致无法使用。
0
func uploadHandler(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
http.Error(w, "只允许POST请求", http.StatusMethodNotAllowed)
return
}
// 解析 multipart 表单,最大内存为32MB
err := r.ParseMultipartForm(32 << 20)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
// 获取名为 myfile 的文件
file, handler, err := r.FormFile("myfile")
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
}
fmt.Fprintf(w, "文件 %s 上传成功", handler.Filename)
}
在保存文件前,应检查上传目录是否存在,若不存在则自动创建。同时,可通过控制 ParseMultipartForm 的参数来限制请求体大小,防止恶意大文件上传。
将上传处理器绑定到指定路由,并启动HTTP服务:
func main() {
http.HandleFunc("/upload", uploadHandler)
http.Handle("/", http.FileServer(http.Dir("."))) // 可选:提供静态页面
fmt.Println("服务运行在 :8080")
log.Fatal(http.ListenAndServe(":8080", nil))
}
只要客户端发送符合规范的 multipart 请求,Go服务就能安全地接收并保存文件。基本上就这些,不复杂但容易忽略目录权限和错误处理。
以上就是Golang如何实现文件上传功能的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号