go語言處理文件上傳和多個文件上傳


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM