zoukankan      html  css  js  c++  java
  • 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来测试文件上传。

  • 相关阅读:
    【命令模式】设计模式之命令模式【原创】
    github page搭建自己的页面
    this request has been blocked;the content must be served over https
    【转载】wamp安装ssl证书
    【函数】register_shutdown_function函数详解【原创】
    08 SSM整合案例(企业权限管理系统):10.权限关联与控制
    删除某些自启动弹窗的默认路径
    08 SSM整合案例(企业权限管理系统):09.用户和角色操作
    08 SSM整合案例(企业权限管理系统):08.权限控制
    08 SSM整合案例(企业权限管理系统):07.订单操作
  • 原文地址:https://www.cnblogs.com/jkko123/p/7001673.html
Copyright © 2011-2022 走看看