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>
    
  • 相关阅读:
    [HNOI2002]营业额统计
    HDU 1374
    HDU 3345
    HDU 2089
    Graham扫描法
    Codeforces 1144D Deduction Queries 并查集
    Codeforces 916E Jamie and Tree 线段树
    Codeforces 1167F Scalar Queries 树状数组
    Codeforces 1167E Range Deleting
    Codeforces 749E Inversions After Shuffle 树状数组 + 数学期望
  • 原文地址:https://www.cnblogs.com/remixnameless/p/14318283.html
Copyright © 2011-2022 走看看