提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
gin文件上传
package main
import (
"net/http"
"path"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.LoadHTMLFiles("./index.html")
router.GET("/index", func(c *gin.Context) {
c.HTML(http.StatusOK, "index.html", nil)
})
// 处理multipart forms提交文件时默认的内存限制是32 MiB
// 可以通过下面的方式修改
// router.MaxMultipartMemory = 8 << 20 // 8 MiB
router.POST("/upload", func(c *gin.Context) {
// 单个文件
//从请求中读取文件
f, err := c.FormFile("f1")
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{
"message": 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",
})
}
})
router.Run(":9090")
}
== path.Join 函数==
path.Join 函数是 Go 标准库 path 包中的一个函数,用于连接一个或多个路径组件,并返回一个由这些组件组成的路径字符串。这个函数会自动处理不同操作系统中的路径分隔符(在 Unix 系统中是 /,在 Windows 系统中是 \),因此它是跨平台的。
dst := path.Join("./", f.Filename)
这里,path.Join 接收两个参数:“./”(表示当前目录)和 f.Filename(表示上传文件的原始文件名)。函数将这两个组件连接在一起,并返回一个完整的路径字符串,例如如果 f.Filename 是 “example.txt”,那么 dst 将是 “./example.txt”。
== c.SaveUploadedFile 方法 ==
c.SaveUploadedFile 是 gin 框架中 Context 类型的一个方法,用于将上传的文件保存到指定的路径。这个方法接收两个参数:一个 *multipart.FileHeader 类型的参数(表示上传的文件),和一个字符串参数(表示要将文件保存到的路径)。
c.SaveUploadedFile(f, dst)
这里,f 是从 c.FormFile(“f1”) 返回的 *multipart.FileHeader 类型的变量,它包含了上传文件的信息。dst 是上面使用 path.Join 构建的文件保存路径。调用 c.SaveUploadedFile(f, dst) 将把上传的文件保存到 dst 指定的路径。
index.html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<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>