如何在Go gin中从JSON发布文件?

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