Gin框架文件上传|青训营笔记

341 阅读1分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记

简简单单写一个关于gin框架上传文件的一个小demo,同样我们也可以不使用gin来写,使用go基本的库也可以完成,不过gin框架写起来比较简单。。。

首先,先mkdir一个新文件夹,然后启动我们的goland(vscode 也行)

进入我们的项目先go mod init初始化一下,然后go get github.com/gin-gonic/gin 把gin包拿下

然后就可以开始写我们的代码部分,我就直接贴出来了

package main

import (
   "fmt"
   limits "github.com/gin-contrib/size"
   "github.com/gin-gonic/gin"
)

func main() {
   e := gin.Default()
   e.Use(limits.RequestSizeLimiter(8 << 20))
   e.LoadHTMLGlob("templates/*")
   e.GET("/upload", GoUpload)
   e.POST("/upload", Upload)
   e.Run(":8081")
}

func Upload(c *gin.Context) {
   file, err := c.FormFile("file")
   if err != nil {
      panic(err.Error())
   }

   c.SaveUploadedFile(file, file.Filename)
   c.String(200, fmt.Sprintf("'%s' upload!", file.Filename))

}
func GoUpload(c *gin.Context) {
   c.HTML(200, "upload.html文件", nil)upload.html文件
}

这里我们还用到一个github.com/gin-contrib/size 中间件来限制上传文件的大小

我这里设置的是最大8Mb

在这里也可以使用MaxMultipartMemory它来控制,不过在我测试时发现 MaxMultipartMemory限制的并不是上传文件的大小,因此这里用了github.com/gin-contrib/size 中间件来控制上传文件的大小。

这些搞定了之后,就可以简单的写一个前端页面。

先新建一个templates文件夹和一个upload.html文件,用来存放我们的前端页面

之后在新建的html文件里面写以下代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

<form action="/upload" method="post" enctype="multipart/form-data">
    请选择上传文件:<input type="file" name="file" id=""><br>
    <input type="submit" value="上传">
</form>

</body>
</html>

完了之后回到我们的main.go文件,go run运行起来就可以了

然后就可以在localhost:8080/upload这个地址来测试我们的这个程序了。