本章介绍echo如何处理文件上传。
在控制器中主要通过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>