🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 文件上传 ### 上传单个文件 #### 服务端 `server.go` ```go package main import ( "fmt" "io" "os" "net/http" "github.com/labstack/echo" "github.com/labstack/echo/middleware" ) func upload(c echo.Context) error { // Read form fields name := c.FormValue("name") email := c.FormValue("email") //----------- // Read file //----------- // Source file, err := c.FormFile("file") if err != nil { return err } src, err := file.Open() if err != nil { return err } defer src.Close() // Destination dst, err := os.Create(file.Filename) if err != nil { return err } defer dst.Close() // Copy if _, err = io.Copy(dst, src); err != nil { return err } return c.HTML(http.StatusOK, fmt.Sprintf("<p>File %s uploaded successfully with fields name=%s and email=%s.</p>", file.Filename, name, email)) } func main() { e := echo.New() e.Use(middleware.Logger()) e.Use(middleware.Recover()) e.Static("/", "public") e.POST("/upload", upload) e.Logger.Fatal(e.Start(":1323")) } ``` #### 客户端 `index.html` ```html <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>Single file upload</title> </head> <body> <h1>Upload single file with fields</h1> <form action="/upload" method="post" enctype="multipart/form-data"> Name: <input type="text" name="name"><br> Email: <input type="email" name="email"><br> Files: <input type="file" name="file"><br><br> <input type="submit" value="Submit"> </form> </body> </html> ``` ### 上传多个文件 #### 服务端 `server.go` ```go package main import ( "fmt" "io" "os" "net/http" "github.com/labstack/echo" "github.com/labstack/echo/middleware" ) func upload(c echo.Context) error { // Read form fields name := c.FormValue("name") email := c.FormValue("email") //------------ // Read files //------------ // Multipart form form, err := c.MultipartForm() if err != nil { return err } files := form.File["files"] for _, file := range files { // Source src, err := file.Open() if err != nil { return err } defer src.Close() // Destination dst, err := os.Create(file.Filename) if err != nil { return err } defer dst.Close() // Copy if _, err = io.Copy(dst, src); err != nil { return err } } return c.HTML(http.StatusOK, fmt.Sprintf("<p>Uploaded successfully %d files with fields name=%s and email=%s.</p>", len(files), name, email)) } func main() { e := echo.New() e.Use(middleware.Logger()) e.Use(middleware.Recover()) e.Static("/", "public") e.POST("/upload", upload) e.Logger.Fatal(e.Start(":1323")) } ``` #### 客户端 `index.html` ```html <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>Multiple file upload</title> </head> <body> <h1>Upload multiple files with fields</h1> <form action="/upload" method="post" enctype="multipart/form-data"> Name: <input type="text" name="name"><br> Email: <input type="email" name="email"><br> Files: <input type="file" name="files" multiple><br><br> <input type="submit" value="Submit"> </form> </body> </html> ```