I want to save image file posted by JSON.
Here is the struct of the post:
type Article struct {
Title string `json:"title"`
Body string `json:"body"`
File []byte `json:"file"`
}
And the handler is :
func PostHandler(c *gin.Context) {
var err error
var json Article
err = c.BindJSON(&json)
if err != nil {
log.Panic(err)
}
//handle photo upload
var filename string
file, header, err := json.File //assignment count mismatch: 3 = 1
if err != nil {
fmt.Println(err)
filename = ""
} else {
data, err := ioutil.ReadAll(file)
if err != nil {
fmt.Println(err)
return
}
filename = path.Join("media", +shared.RandString(5)+path.Ext(header.Filename))
err = ioutil.WriteFile(filename, data, 0777)
if err != nil {
io.WriteString(w, err.Error())
return
}
}
...
But I get
assignment count mismatch: 3 = 1
I copied the file handling part from a working multipart form handler which worked fine but apparently,
file, header, err := r.FormFile("uploadfile")
can not be translated into JSON handling.
I have looked at gin docs but could not find examples involving json file handling. So how can I fix this?
In your code you say var json Article
where type article is defined as
type Article struct {
Title string `json:"title"`
Body string `json:"body"`
File []byte `json:"file"`
}
And File is of type []byte
. Type byte doesn't return anything other than what it holds
Your Article.File
is not the same as r.FormFile
where FormFile
is a method that returns 3 items
So file, header, err := json.File
isn't file, header, err := r.FormFile("foo")
See the implementation and method description from godocs -> here