使用Gin框架上传多文件
- 在HTML中使用
input:file
标签传输多文件form
的method
属性设置为POST
form
的enctype
属性设置为multipart/form-data
input:file
标签中添加属性multiple="multiple"
<!--multiUpload.html-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" />
<title>Multi-Upload</title>
</head>
<body>
<form
action="/multiup"
method="post"
accept-charset="utf-8"
enctype="multipart/form-data"
>
<input type="file" name="fs" id="fs" multiple="multiple" />
<input type="submit" name="upload" id="upload" value="" />
</form>
</body>
</html>
package main
import (
"fmt"
"log"
"net/http"
"path"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.LoadHTMLFiles("multiUpload.html")
r.GET("/multiup", func(c *gin.Context) {
c.HTML(http.StatusOK, "multiUpload.html", nil)
})
r.POST("/multiup", func(c *gin.Context) {
form, _ := c.MultipartForm()
fs := form.File["fs"]
for index, f := range fs {
log.Println(f.Filename)
dst := fmt.Sprintf("./%s-%d", f.Filename, index)
// 上传文件到指定的目录
c.SaveUploadedFile(f, dst)
}
c.JSON(http.StatusOK, gin.H{
"message": fmt.Sprintf("%d uploaded!", len(fs)),
})
})
r.Run(":8080")
}
注意:
<input type="file" name="fs" id="fs" multiple="multiple" />
中的name
字段与fs := form.File["fs"]
中的索引"fs"
相对应,同一个batch的文件共享一个name
使用Gin框架上传单文件
<!--Upload.html-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width" />
<title>Multi-Upload</title>
</head>
<body>
<form
action="/multiup"
method="post"
accept-charset="utf-8"
enctype="multipart/form-data"
>
<input type="file" name="f" id="fs" />
<input type="submit" name="upload" id="upload" value="" />
</form>
</body>
</html>
package main
import (
"fmt"
"log"
"net/http"
"path"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.LoadHTMLFiles("upload.html")
r.GET("/up", func(c *gin.Context) {
c.HTML(http.StatusOK, "upload.html", nil)
})
r.POST("/up", func(c *gin.Context) {
f, err := c.FormFile("f")
if err != nil {
log.Default().Fatalln(err.Error())
}
dst := path.Join("./", f.Filename)
err = c.SaveUploadedFile(f, dst)
if err != nil {
log.Default().Fatalln(err)
}
c.JSON(http.StatusOK, gin.H{
"message": "ok",
})
})
r.Run(":8080")
}
注意:
<input type="file" name="f" id="f" />
中的name
字段与f, err := c.FormFile("f")
中的索引"f"
相对应