Go 语言使用 Gin框架上传多文件

使用Gin框架上传多文件

  • 在HTML中使用input:file标签传输多文件
    1. formmethod属性设置为POST
    2. formenctype属性设置为multipart/form-data
    3. input:file标签中添加属性multiple="multiple"
<!--multiUpload.html-->
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width" />
    <title>Multi-Upload</title>
  </head>
  <body>
    <form
      action="/multiup"
      method="post"
      accept-charset="utf-8"
      enctype="multipart/form-data"
    >
      <input type="file" name="fs" id="fs" multiple="multiple" />
      <input type="submit" name="upload" id="upload" value="" />
    </form>
  </body>
</html>
package main

import (
  "fmt"
  "log"
  "net/http"
  "path"

  "github.com/gin-gonic/gin"
)

func main() {
  r := gin.Default()
  r.LoadHTMLFiles("multiUpload.html")

  r.GET("/multiup", func(c *gin.Context) {
    c.HTML(http.StatusOK, "multiUpload.html", nil)
  })

  r.POST("/multiup", func(c *gin.Context) {

    form, _ := c.MultipartForm()

    fs := form.File["fs"]

    for index, f := range fs {
      log.Println(f.Filename)
      dst := fmt.Sprintf("./%s-%d", f.Filename, index)
      // 上传文件到指定的目录
      c.SaveUploadedFile(f, dst)
    }

    c.JSON(http.StatusOK, gin.H{
      "message": fmt.Sprintf("%d uploaded!", len(fs)),
    })
  })
  
  r.Run(":8080")
}

注意: <input type="file" name="fs" id="fs" multiple="multiple" />中的name字段与fs := form.File["fs"]中的索引"fs"相对应,同一个batch的文件共享一个name

使用Gin框架上传单文件

<!--Upload.html-->
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width" />
    <title>Multi-Upload</title>
  </head>
  <body>
    <form
      action="/multiup"
      method="post"
      accept-charset="utf-8"
      enctype="multipart/form-data"
    >
      <input type="file" name="f" id="fs" />
      <input type="submit" name="upload" id="upload" value="" />
    </form>
  </body>
</html>
package main

import (
  "fmt"
  "log"
  "net/http"
  "path"

  "github.com/gin-gonic/gin"
)

func main() {
  r := gin.Default()
  r.LoadHTMLFiles("upload.html")

  r.GET("/up", func(c *gin.Context) {
    c.HTML(http.StatusOK, "upload.html", nil)
  })

  r.POST("/up", func(c *gin.Context) {

    f, err := c.FormFile("f")
    if err != nil {
      log.Default().Fatalln(err.Error())
    }

    dst := path.Join("./", f.Filename)
    err = c.SaveUploadedFile(f, dst)
    if err != nil {
      log.Default().Fatalln(err)
    }

    c.JSON(http.StatusOK, gin.H{
      "message": "ok",
    })
  })
  
  r.Run(":8080")
}

注意: <input type="file" name="f" id="f" />中的name字段与f, err := c.FormFile("f")中的索引"f"相对应

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值