網頁

2021/7/8

Golang Gin 上傳多個檔案 upload multiple files

Gin應用程式上傳多個檔案的方式如下。


範例環境:

  • Go 1.16
  • Gin 1.7.2

例如下面是提交多個檔案的表單網頁demo.html,提交位址為http://localhost:8080/upload

demo.html

<!DOCTYPE html>
<html>
<head>
</head>
<body>
    <form action="http://localhost:8080/upload" 
            method="POST" 
            enctype="multipart/form-data">
        upload file:<br>
            <input name="files" type="file"><br>
            <input name="files" type="file"><br>
            <input name="files" type="file"><br>
        <input type="submit">
    </form>
</body>
</html>

Gin在設定API路徑時使用gin.ContextMultipartForm()取得表單Form,然後以上傳檔案欄位名稱取得其map屬性File中的FileHeader slice。

例如下面的APIPOST | /upload接收表單上傳檔案,多個上傳檔案欄位名稱為files,然後將檔案存在所在目錄下的tmp資料夾(若資料夾不存在不會自動建立及存檔)。

main.go

package main

import (
    "log"
    "net/http"

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

func main() {
    router := gin.Default()

    router.POST("/upload", func(c *gin.Context) {
        form, _ := c.MultipartForm()
        files := form.File["files"]

        for _, file := range files {
            log.Println(file.Filename)

            c.SaveUploadedFile(file, "tmp/"+file.Filename)
        }
        c.String(http.StatusOK, "%d files uploaded!", len(files))
    })

    router.Run()
}


沒有留言:

張貼留言