Echo框架 文件上传
使用 Go Echo框架处理上传文件时,我们需要在控制器(controller)中通过 echo.Context 上下文对象的 FormFile 函数获取用户上传的文件。
1. 服务端代码
package main import ( "fmt" "io" "net/http" "os" "github.com/labstack/echo" "github.com/labstack/echo/middleware" ) // 处理上传文件的控制器 func upload(c echo.Context) error { //----------- // 介绍演示如何处理文件上传 //----------- // 通过FormFile函数获取客户端上传的文件 file, err := c.FormFile("file") if err != nil { return err } // 打开用户上传的文件 src, err := file.Open() if err != nil { return err } defer src.Close() // 创建目标文件,就是我们打算把用户上传的文件保存到什么地方 // file.Filename 参数指的是我们以用户上传的文件名,作为目标文件名,也就是服务端保存的文件名跟用户上传的文件名一样 dst, err := os.Create(file.Filename) if err != nil { return err } defer dst.Close() // 这里将用户上传的文件复制到服务端的目标文件 if _, err = io.Copy(dst, src); err != nil { return err } return c.HTML(http.StatusOK, fmt.Sprintf("<p>文件上传成功: %s</p>", file.Filename)) } func main() { e := echo.New() // 设置静态资源中间件, public目录保存静态资源 e.Static("/", "public") // 注册路由 e.POST("/upload", upload) e.Logger.Fatal(e.Start(":1323")) }
2. html 代码
文件名:public/index.html。
在本地创建一个 public 目录, 保存 index.html 代码。
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>Single file upload</title> </head> <body> <h1>上传文件演示</h1> <form action="/upload" method="post" enctype="multipart/form-data"> 文件: <input type="file" name="file"><br><br> <input type="submit" value="上传文件"> </form> </body> </html>
在 Go Echo框架中,中间件(Middleware)指的是可以拦截 http请求-响应 生命周期的特殊函数。在请求-响应生命周期中可以注册多个中间件,每个中间件执行不同的功能,一个中间执行完再轮到下一个中间件执行。中间件常见的应用场景如下:请求限速、api接口签名处理、权限校验、统一错误处理。