zoukankan      html  css  js  c++  java
  • Golang ECHO文件上传【9】

    golang echo处理文件上传

    echo如何处理文件上传?

    在控制器中主要通过echo.Context上下文对象的FormFile函数获取用户上传的文件。

    1.单文件上传

    package main
    
    // 引入依赖包
    import (
    	"net/http"
    	"github.com/labstack/echo"
    	"os"
    	"io"
    )
    
    func upload(c echo.Context)error{
    	// 通过echo.Contxt实例的FormFile函数获取客户端上传的单个文件
    	file,err:=c.FormFile("filename") //filename要与前端对应上
    	if err!=nil{
    		return err
    	}
    	// 先打开文件源
    	src,err:=file.Open()
    	if err!=nil{
    		return err
    	}
    	defer src.Close()
    
    	// 下面创建保存路径文件 file.Filename 即上传文件的名字 创建upload文件夹
    	dst,err:=os.Create("upload/"+file.Filename)
    	if err !=nil {
    		return err
    	}
    	defer dst.Close()
    
    	// 下面将源拷贝到目标文件
    	if _,err=io.Copy(dst,src);err !=nil{
    		return err
    	}
        
    	return c.String(http.StatusOK,"文件上传成功")
    }
    
    func main(){
    	// 创建echo实例
    	e:=echo.New()
    	// 路由
        // 实现一个html页面 实现页面渲染路由
    	e.GET("/",func(c echo.Context)error{
    		return c.File("index.html")
    	})
    	e.POST("/upload",upload)
    	// 开启服务
    	e.Logger.Fatal(e.Start(":1323"))
    }
    

    1.2.html视图代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <h1>上传单个文件</h1>
        <form action="/upload" method="POST" enctype="multipart/form-data">
            选择文件: <input type="file" name="filename"><br/>
            <input type="submit" value="提交">
        </form>
    </body>
    </html>
    

    2.多文件上传

    package main
    
    // 引入依赖包
    import (
    	"net/http"
    	"github.com/labstack/echo"
    	"os"
    	"io"
    )
    
    func upload2(c echo.Context)error{
    	// 与单个文件上传不一样的地址是读取文件
    	form,err :=c.MultipartForm()
    	if err!=nil{
    		return err
    	}
    
    	// files要与前端一致
    	files:= form.File["files"]
    
    	//下面都是一样,只是在for循环中
    	// 从upload中拷贝下
    	for _,file:=range files {
    		// 先打开文件源
    		src,err:=file.Open()
    		if err!=nil{
    			return err
    		}
    		defer src.Close()
    
    		// 下面创建保存路径文件
    		// file.Filename 即上传文件的名字  创建文件夹upload2
    		dst,err:=os.Create("upload2/"+file.Filename)
    		if err !=nil {
    			return err
    		}
    		defer dst.Close()
    
    		// 下面将源拷贝到目标文件
    		if _,err=io.Copy(dst,src);err !=nil{
    
    			return err
    		}
    	}
    	return c.String(http.StatusOK,"多文件上传成功。")
    }
    
    
    func main(){
    	// 创建echo实例
    	e:=echo.New()
    	// 路由
    	// 实现一个html页面 实现页面渲染路由
    	e.GET("/files",func(c echo.Context)error{
    		return c.File("index2.html")
    	})
    	// 实现upload2路由方法,upload2与upload 很多相似方法
    	e.POST("/upload2",upload2)	
    	// 开启服务
    	e.Logger.Fatal(e.Start(":1323"))
    }
    
    

    2.2.html视图代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>多文件上传</title>
    </head>
    <body>
        <h1>上传多个个文件</h1>
        <!--多文件上传的路径为upload2-->
        <form action="/upload2" method="POST" enctype="multipart/form-data">
            选择文件: <input type="file" name="files" multiple><br/>
            <input type="submit" value="提交">
        </form>
    </body>
    </html>
    
  • 相关阅读:
    模拟登陆江西理工大学教务系统
    python3爬虫 -----华东交大校园新闻爬取与数据分析
    以selenium模拟登陆12306
    PAT (Basic Level) Practice (中文)1076 Wifi密码 (15 分)
    PAT (Basic Level) Practice (中文)1047 编程团体赛 (20 分)
    PAT (Basic Level) Practice (中文)1029 旧键盘 (20 分)
    PAT (Basic Level) Practice (中文)1016 部分A+B (15 分)
    PAT (Basic Level) Practice (中文)1031 查验身份证 (15 分)
    PAT (Basic Level) Practice (中文)1041 考试座位号 (15 分)
    PAT (Basic Level) Practice (中文)1037 在霍格沃茨找零钱 (20 分)
  • 原文地址:https://www.cnblogs.com/remixnameless/p/14318283.html
Copyright © 2011-2022 走看看