Golang-gin文件之上传单文件和上传多文件

该博客介绍了如何使用Go语言处理前端的单文件和多文件上传。前端通过HTML表单提交,后端Go代码展示了如何接收并保存上传的文件。示例代码详细解释了上传过程,包括设置内存限制、读取上传文件、保存文件到服务器等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件上传

单文件上传

前端示例:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <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>

Go后端示例:

package main
import (
   "github.com/gin-gonic/gin"
   "net/http"
   "path"
)
func main() {
    // 处理multipart forms提交文件时默认的内存限制是32 MiB
    	// 可以通过下面的方式修改
	// r.MaxMultipartMemory = 8 << 20  // 8 MiB
   r := gin.Default()
   r.LoadHTMLFiles("./upload.html")
   r.GET("/put", func(c *gin.Context) {
      c.HTML(http.StatusOK, "upload.html", nil)
   })
   r.POST("/upload", func(c *gin.Context) {
      //从请求中读取文件
      file, err := c.FormFile("f1") //请求中获取携带的参数,就是html文件中的name="f1"
      if err != nil {               //读取失败,将错误报出来
         c.JSON(http.StatusBadRequest, gin.H{
            "error": err.Error(),
         })
      } else { //读取成功,就保存到服务端本地
         fileDest := path.Join("./", file.Filename)
         c.SaveUploadedFile(file, fileDest)
         c.JSON(http.StatusOK, gin.H{
            "status": "ok",
         })
      }
      //将读取到的文件保存到服务端的本地
   })
   r.Run(":9090")
}

多文件上传
前端

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>

<form action="/upload" method="post" enctype="multipart/form-data">
    <div>
      <input type="file" name="f1">
      <input type="submit" value="提交">
    </div>
    <div>
        <input type="file" name="f1">
        <input type="submit" value="提交">
    </div>
    <div>
        <input type="file" name="f1">
        <input type="submit" value="提交">
    </div>
    <div>
        <input type="file" name="f1">
        <input type="submit" value="提交">
    </div>
</form>

</body>
</html>

后端Go代码

package main

import (
   "fmt"
   "github.com/gin-gonic/gin"
   "net/http"
   "path"
)

func main() {
   r := gin.Default()
   r.LoadHTMLFiles("./upload.html")
   r.GET("/put", func(c *gin.Context) {
      c.HTML(http.StatusOK, "upload.html", nil)
   })

   r.POST("/upload", func(c *gin.Context) {
      form, _ := c.MultipartForm()
      files := form.File["f1"] //form.file["f1"]获取的是前端中name=f1
      for _, file := range files { //取files中的所有图片
         dest := path.Join("./", file.Filename) //保存路径
         c.SaveUploadedFile(file, dest)
      }
      c.JSON(http.StatusOK, gin.H{
         "message": fmt.Sprintf("%d files upload!", len(files)),
      })
   })
   r.Run(":9090")
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值