这是我参与「第三届青训营 -后端场」笔记创作活动的第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这个地址来测试我们的这个程序了。