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來測試文件上傳。
