Copyright © 2022-2025 aizws.net · 网站版本: v1.2.6·内部版本: v1.25.2·
页面加载耗时 0.00 毫秒·物理内存 135.3MB ·虚拟内存 1372.6MB
欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
使用 Go Echo框架处理上传文件时,我们需要在控制器(controller)中通过 echo.Context 上下文对象的 FormFile 函数获取用户上传的文件。
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"))
}
文件名: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接口签名处理、权限校验、统一错误处理。