文档上傳
上傳文档也是發請求,也是借助HTTP請求,只不過是客戶耑上傳到服務耑,下載也是一樣。
單個文档上傳
func main(){ router := gin.Default() // 可以通過下面的方式修改 router.POST("/upload",func(c *gin.Context){ file, err := c.FormFile("file") If err != nil { c.JSON(http.StatusInternalServerError, gin.H{ "message":err.Error(), }) return } log.Println(file.Filename) dst := fmt.Sprintf("C:/tmp/%s", file.Filename) c.SaveUploadedFile(file,dst) c.JSON(http.StatusOK, gin.H{ "message":fmt.Sprintf("'%s'uploaded!",file.Filename) }) }) router.Run() }
多個文档上傳
func main(){ router.gin.Default() // 可以通過下面的方式修改 router.POST("/upload", func(c *gin.Context){ form, _ := c.MultipartForm() files := form.File["file"] for index, file := range files{ log.Println(file.Filename) dst := fmt.Sprintf("C:/tmp/%s_%d", file.Filename, index) c.SaveUploadedFile(file,dst) } c.JSON(http.StatusOK, gin.H{ "message": fmt.Sprintf("'%d'uploaded!", len(files)) }) }) router.Run() }
例子:單個文档
// main.go
package main import ( "github.com/gin-gonic/gin" "net/http" "fmt" "path" ) func main(){ r := gin.Default() r.LoadHTMLFiles("./index.html") r.GET("/index", func(c *gin.Context){ c.HTML(http.StatusOK, "index.html", nil) }) r.POST("/upload", func(c *gin.Context){ f, err := c.FormFile("f1") // 從請求中獲取攜帶的參數 if err != nil { C.JSON(http.StatusBadRequest, gin.H{ "error": err.Error(), }) } else { // dst := fmt.Sprintf("./%s", f.Filename) dst := path.Join("./", f.Filename) c.SaveUploadedFile(f, dst) c.JSON(http.StatusOK, gin.H{ "status":"OK", }) } }) r.Run(":8080") }
// index.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>index</title> </head> <body> <form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="f1"> <input type="submit" value="上傳"> </form> </body> </html>