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>
posted @ 2021-01-23 17:25  自己有自己的调调、  阅读(1699)  评论(0编辑  收藏  举报