package main import ( "fmt" "html/template" "io" "log" "net/http" "os" ) //上傳方法 func upload(w http.ResponseWriter, r *http.Request) { //這裡是get請求 if r.Method == "GET" { t, _ := template.ParseFiles("upload.html") t.Execute(w, nil) } else if r.Method == "POST" { // 服務耑調用r.ParseMultipartForm,把上傳的文档存儲在内存和臨時文档中 32 << 20 是一個很大的值:33554432 r.ParseMultipartForm(32 << 20) //這裡獲取表單的uploadfile file, handler, err := r.FormFile("uploadfile") if err != nil { fmt.Println(err) return } defer file.Close() //這裡打開文档buffer f, err := os.OpenFile("./upload/"+handler.Filename, os.O_WRONLY|os.O_CREATE, 0666) if err != nil { fmt.Println(err) return } defer f.Close() //把文档cp到指定目錄下。 io.Copy(f, file) fmt.Fprintf(w, "%v", handler.Header) fmt.Fprintf(w, "上傳成功") } else { fmt.Println("error") } } func main() { http.HandleFunc("/upload", upload) err := http.ListenAndServe(":8081", nil) if err != nil { log.Fatal("ListenAndServe:", err) } }
<form method="POST" action="/upload" enctype="multipart/form-data"> <input type="file" name="uploadfile" /> <input type="submit" value="上傳" /> </form>