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) +}