Go Web 框架 Gin 上传单个文件的步骤
1、首先定义2个路由,分别是GET的“/”和POST的“/”
GET的“/”:用于展示上传页面
POST的“/”:用于处理上传的文件
app.GET("/", index)
app.POST("/", indexPost)
2、展示页面
func index(c *gin.Context) {
c.HTML(http.StatusOK, "index.html", nil)
}
这个是展示的页面HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="/asset/css/bootstrap.css">
<script src="/asset/js/jquery-3.6.0.js"></script>
<script src="/asset/js/bootstrap.js"></script>
</head>
<body class="container" style="margin-top: 30px">
<form action="/" method="post" enctype="multipart/form-data">
<div class="form-group">
<p><input class="form-control-file" type="file" name="file"></p>
</div>
<div class="form-group">
<p><input class="form-control" type="submit"></p>
</div>
</form>
</body>
</html>
enctype="multipart/form-data":上传文件的时候,这个属性一定要写正确
在input标签中,名字写成file,类型一定要写成file
3、处理上传的文件
func indexPost(c *gin.Context) {
file, err := c.FormFile("file")
if err != nil {
return
}
newFile := fmt.Sprintf(
"upload/%s%s%s",
time.Now().Format("2006-01-02-15-04-05"),
"-",
file.Filename,
)
fmt.Println(newFile)
err = c.SaveUploadedFile(file, newFile)
if err != nil {
_, _ = c.Writer.Write([]byte(err.Error()))
}
_, _ = c.Writer.Write([]byte("上传成功"))
}
newFile的作用是,在upload文件夹下,文件名为当前时间字符串+“-”+文件名的拼接,放置文件名冲突
(1)c.FormFile("file")的作用是获取到"file"的*multipart.FileHeader,其中"file"为表单HTML的name属性名
(2)c.SaveUploadedFile(file, newFile)的作用是保存上传的文件,有2个参数,第1个参数是根据c.FormFile("file")的作用是获取到"file"的*multipart.FileHeader,第2个参数是保存的路径
本文暂时没有评论,来添加一个吧(●'◡'●)