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