• 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来测试文件上传。

  • 相关阅读:
    后缀自动机学习小记
    [bzoj4524] [loj#2047] [Cqoi2016] 伪光滑数
    [bzoj4825] [loj#2018] [Hnoi2017] 单旋
    [bzoj4571] [loj#2016] [Scoi2016] 美味
    [bzoj4569] [loj#2014] [Scoi2016] 萌萌哒
    [bzoj4568] [loj#2013] [Scoi2016] 幸运数字
    [bzoj4567] [loj#2012] [SCOI2016] 背单词
    deque双向队列
    STL_vector
    qsort与sort()
  • 原文地址:https://www.cnblogs.com/jkko123/p/7001673.html
Copyright © 2020-2023  润新知