title: File Upload url: /cookbook/file-upload menu: side: name: 文件上传 parent: cookbook
weight: 12
文件上传
上传单个文件
服务端
server.go
package mainimport ("fmt""io""os""net/http""github.com/labstack/echo""github.com/labstack/echo/middleware")func upload(c echo.Context) error {// Read form fieldsname := c.FormValue("name")email := c.FormValue("email")//-----------// Read file//-----------// Sourcefile, err := c.FormFile("file")if err != nil {return err}src, err := file.Open()if err != nil {return err}defer src.Close()// Destinationdst, err := os.Create(file.Filename)if err != nil {return err}defer dst.Close()// Copyif _, 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
<!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
package mainimport ("fmt""io""os""net/http""github.com/labstack/echo""github.com/labstack/echo/middleware")func upload(c echo.Context) error {// Read form fieldsname := c.FormValue("name")email := c.FormValue("email")//------------// Read files//------------// Multipart formform, err := c.MultipartForm()if err != nil {return err}files := form.File["files"]for _, file := range files {// Sourcesrc, err := file.Open()if err != nil {return err}defer src.Close()// Destinationdst, err := os.Create(file.Filename)if err != nil {return err}defer dst.Close()// Copyif _, 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
<!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>
