编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

Go Web 框架 Gin 上传单个文件的步骤

wxchong 2024-07-25 13:33:37 开源技术 50 ℃ 0 评论

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个参数是保存的路径

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表