uploadOne.html代碼如下:
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form action="http://127.0.0.1:9090/uploadOne" method="post" enctype="multipart/form-data"> 文件:<input type="file" name="file" value=""> <input type="submit" value="提交"> </form> </body> </html>
uploadMore.html代碼如下:
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form action="http://127.0.0.1:9090/uploadMore" method="post" enctype="multipart/form-data"> 文件:<input type="file" name="file" value=""><br> 文件:<input type="file" name="file" value=""><br> 文件:<input type="file" name="file" value=""><br> <input type="submit" value="提交"> </form> </body> </html>
main.go代碼如下:
package main import ( "net/http" "os" "io" "html/template" "log" ) func uploadOne(w http.ResponseWriter, r *http.Request) { //判斷請求方式 if r.Method == "POST" { //設置內存大小 r.ParseMultipartForm(32 << 20); //獲取上傳的第一個文件 file, header, err := r.FormFile("file"); defer file.Close(); if err != nil { log.Fatal(err); } //創建上傳目錄 os.Mkdir("./upload", os.ModePerm); //創建上傳文件 cur, err := os.Create("./upload/" + header.Filename); defer cur.Close(); if err != nil { log.Fatal(err); } //把上傳文件數據拷貝到我們新建的文件 io.Copy(cur, file); } else { //解析模板文件 t, _ := template.ParseFiles("./uploadOne.html"); //輸出文件數據 t.Execute(w, nil); } } func uploadMore(w http.ResponseWriter, r *http.Request) { if r.Method == "POST" { //設置內存大小 r.ParseMultipartForm(32 << 20); //獲取上傳的文件組 files := r.MultipartForm.File["file"]; len := len(files); for i := 0; i < len; i++ { //打開上傳文件 file, err := files[i].Open(); defer file.Close(); if err != nil { log.Fatal(err); } //創建上傳目錄 os.Mkdir("./upload", os.ModePerm); //創建上傳文件 cur, err := os.Create("./upload/" + files[i].Filename); defer cur.Close(); if err != nil { log.Fatal(err); } io.Copy(cur, file); } } else { //解析模板文件 t, _ := template.ParseFiles("./uploadMore.html"); //輸出文件數據 t.Execute(w, nil); } } func main() { http.HandleFunc("/uploadMore", uploadMore); http.HandleFunc("/uploadOne", uploadOne); err := http.ListenAndServe(":9090", nil); if err != nil { log.Fatal(err); } }
通過http://127.0.0.1:9090/uploadOne和http://127.0.0.1:9090/upladMore來測試文件上傳。