• 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>
    
  • 相关阅读:
    各个地区2.4G及5G信道一览表 [转]
    nf_conntrack
    串口 属性 设置 termios.h [转载&修改]
    802.3 Logical Link Control 协议相关
    HTTP协议中GET、POST和HEAD的介绍[转载]
    Android Shell、SSH、GCC安装与配置
    mybatis中sql语句总结
    [leedcode 128] Longest Consecutive Sequence
    [leedcode 126] Word Ladder
    [leedcode 125] Valid Palindrome
  • 原文地址:https://www.cnblogs.com/remixnameless/p/14318283.html
Copyright © 2020-2023  润新知