Skip to content

How to upload array of files with params #774

Closed
@selvam347

Description

@selvam347

I can upload single file using https://github.com/gin-gonic/gin/issues/548.

package main
import "github.com/gin-gonic/gin"
import "log"
import "net/http"
import "io"
import "os"

func main() {
	router := gin.Default()
	router.POST("/upload", func(c *gin.Context) {
		file, handler, err := c.Request.FormFile("upload")
		filename := handler.Filename
		log.Println("Received file:", handler.Filename)
		out, err := os.Create("./tmp/" + filename)
		if err != nil {
			log.Fatal(err)
		}
		defer out.Close()
		_, err = io.Copy(out, file)
		if err != nil {
			log.Fatal(err)
		}
		c.String(http.StatusOK, "Uploaded...")
	})
	router.Run(":8080")
}

But how to upload array of files like the following,
curl -X POST http://localhost:8080/upload -F "images[]=@/home/amp/hack/property1.jpg" -F "images[]=@/home/ack/property2.jpeg" -H "Content-Type: multipart/form-data"

And give me suggestion for the same above code, how to get some parameters with documents. Finally request will be like,

{
  "client": {
    "name": "",
    "Industry": "",
    "profile_image": "PROFILE-IMAGE-FILE",
    "supporting_docs": {
      "docs": [
        "DOCUMENT1-FILE",
        "DOCUMENT2-FILE"
      ],
      "comments": "Comment test"
    }
  }
} 

Activity

tboerger

tboerger commented on Dec 23, 2016

@tboerger
Contributor

@andreynering does this also work with your form array value patch?

andreynering

andreynering commented on Dec 23, 2016

@andreynering
Contributor

Haven't tried by I don't think so.

c.Request.FormFile is Go's method, not Gin's.

self-assigned this
on Dec 24, 2016
appleboy

appleboy commented on Dec 24, 2016

@appleboy
Member

@tboerger @selvam347 @andreynering

I create new PR to support upload single or multiple files. #775

upload single file:

package main

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

func main() {
	router := gin.Default()
	router.POST("/upload", func(c *gin.Context) {
		// single file
		file, _ := c.FormFile("file")
		log.Println(file.Filename)

		c.String(http.StatusOK, "Uploaded...")
	})
	router.Run(":8080")
}

curl command:

curl -X POST http://localhost:8080/upload -F "file=@/Users/mtk10671/z.sh" -H "Content-Type: multipart/form-data"

upload multiple file:

package main

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

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

		for _, file := range files {
			log.Println(file.Filename)
		}
		c.String(http.StatusOK, "Uploaded...")
	})
	router.Run(":8080")
}

curl command:

curl -X POST http://localhost:8080/upload -F "upload[]=@/Users/mtk10671/z.sh" -F "upload[]=@/Users/mtk10671/z.sh" -H "Content-Type: multipart/form-data"
appleboy

appleboy commented on Dec 27, 2016

@appleboy
Member

Closed by #775

roushanj

roushanj commented on Feb 22, 2018

@roushanj

How to upload In S3 Bucket ?
verification

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

    Development

    No branches or pull requests

      Participants

      @appleboy@tboerger@andreynering@selvam347@roushanj

      Issue actions

        How to upload array of files with params · Issue #774 · gin-gonic/gin