文档上傳
上傳文档也是發請求,也是借助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>