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>