文件上传
单文件上传 前端示例:<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="f1">
<input type="submit" value="提交">
</form>
</body>
</html>
Go后端示例:
package main
import (
"github.com/gin-gonic/gin"
"net/http"
"path"
)
func main() {
// 处理multipart forms提交文件时默认的内存限制是32 MiB
// 可以通过下面的方式修改
// r.MaxMultipartMemory = 8 << 20 // 8 MiB
r := gin.Default()
r.LoadHTMLFiles("./upload.html")
r.GET("/put", func(c *gin.Context) {
c.HTML(http.StatusOK, "upload.html", nil)
})
r.POST("/upload", func(c *gin.Context) {
//从请求中读取文件
file, err := c.FormFile("f1") //请求中获取携带的参数,就是html文件中的name="f1"
if err != nil { //读取失败,将错误报出来
c.JSON(http.StatusBadRequest, gin.H{
"error": err.Error(),
})
} else { //读取成功,就保存到服务端本地
fileDest := path.Join("./", file.Filename)
c.SaveUploadedFile(file, fileDest)
c.JSON(http.StatusOK, gin.H{
"status": "ok",
})
}
//将读取到的文件保存到服务端的本地
})
r.Run(":9090")
}
多文件上传
前端
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>文件上传</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
<div>
<input type="file" name="f1">
<input type="submit" value="提交">
</div>
<div>
<input type="file" name="f1">
<input type="submit" value="提交">
</div>
<div>
<input type="file" name="f1">
<input type="submit" value="提交">
</div>
<div>
<input type="file" name="f1">
<input type="submit" value="提交">
</div>
</form>
</body>
</html>
后端Go代码
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"net/http"
"path"
)
func main() {
r := gin.Default()
r.LoadHTMLFiles("./upload.html")
r.GET("/put", func(c *gin.Context) {
c.HTML(http.StatusOK, "upload.html", nil)
})
r.POST("/upload", func(c *gin.Context) {
form, _ := c.MultipartForm()
files := form.File["f1"] //form.file["f1"]获取的是前端中name=f1
for _, file := range files { //取files中的所有图片
dest := path.Join("./", file.Filename) //保存路径
c.SaveUploadedFile(file, dest)
}
c.JSON(http.StatusOK, gin.H{
"message": fmt.Sprintf("%d files upload!", len(files)),
})
})
r.Run(":9090")
}