From 635cb0dbc01400f585155e3e020aac129fa3039c Mon Sep 17 00:00:00 2001 From: yanzuoguang Date: Sat, 25 Oct 2025 22:30:30 +0800 Subject: [PATCH] =?UTF-8?q?feat(upload):=20=E5=AE=9E=E7=8E=B0=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=B8=8A=E4=BC=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加处理 multipart 表单的 Go 函数 - 创建用于文件上传的 HTML 表单页面 - 支持解析和显示上传文件的元数据- 实现多文件上传处理逻辑 - 添加城市和姓名的文本文件示例- 集成 Bootstrap 样式提升界面美观度 --- 24-httpserver/httpserver/static/city.txt | 2 + 24-httpserver/httpserver/static/upload.html | 31 +++++++++++++ 24-httpserver/httpserver/upload.go | 51 +++++++++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 24-httpserver/httpserver/static/city.txt create mode 100644 24-httpserver/httpserver/static/upload.html create mode 100644 24-httpserver/httpserver/upload.go diff --git a/24-httpserver/httpserver/static/city.txt b/24-httpserver/httpserver/static/city.txt new file mode 100644 index 0000000..0a47067 --- /dev/null +++ b/24-httpserver/httpserver/static/city.txt @@ -0,0 +1,2 @@ +城市:重庆 +姓名:颜佐光 \ No newline at end of file diff --git a/24-httpserver/httpserver/static/upload.html b/24-httpserver/httpserver/static/upload.html new file mode 100644 index 0000000..917464d --- /dev/null +++ b/24-httpserver/httpserver/static/upload.html @@ -0,0 +1,31 @@ + + + + + + Pro Go + + + +
+ Upload File +
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+ + \ No newline at end of file diff --git a/24-httpserver/httpserver/upload.go b/24-httpserver/httpserver/upload.go new file mode 100644 index 0000000..b3ba78a --- /dev/null +++ b/24-httpserver/httpserver/upload.go @@ -0,0 +1,51 @@ +package main + +import ( + "fmt" + "io" + "net/http" +) + +func HandleMultipartForm(writer http.ResponseWriter, request *http.Request) { + fmt.Fprintf(writer, "Name: %v , City : %v \n", request.FormValue("name"), request.FormValue("city")) + fmt.Fprintln(writer, "--------") + + file, header, err := request.FormFile("files") + if err != nil { + http.Error(writer, err.Error(), http.StatusInternalServerError) + return + } + defer file.Close() + fmt.Fprintf(writer, "File Name: %v, File Size: %v \n", header.Filename, header.Size) + for k, v := range header.Header { + fmt.Fprintf(writer, "Key: %v , Value: %v \n", k, v) + } + fmt.Fprintln(writer, "--------") + io.Copy(writer, file) +} + +func HandleMultipartForm2(writer http.ResponseWriter, request *http.Request) { + request.ParseMultipartForm(10 * 1024 * 1024) + fmt.Fprintf(writer, "Name: %v , City : %v \n", request.FormValue("name"), request.FormValue("city")) + fmt.Fprintln(writer, "--------\n") + + for _, header := range request.MultipartForm.File["files"] { + fmt.Fprintf(writer, "\n\n--------\nFile Name: %v, File Size: %v \n", header.Filename, header.Size) + file, err := header.Open() + if err != nil { + http.Error(writer, err.Error(), http.StatusInternalServerError) + return + } + defer file.Close() + for k, v := range header.Header { + fmt.Fprintf(writer, "Key: %v , Value: %v \n", k, v) + } + fmt.Fprintln(writer, "--------") + io.Copy(writer, file) + } + +} + +func init() { + http.HandleFunc("/forms/upload", HandleMultipartForm2) +}