2017-07-15 70 views
0

我想保存由JSON發佈的圖像文件。如何從JSON中發佈文件在杜松子酒中?

下面是文章的結構:

type Article struct { 
    Title string `json:"title"` 
    Body string `json:"body"` 
    File []byte `json:"file"` 
} 

而且處理程序是:

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 
      } 

     } 
... 

,但我得到

分配數量不匹配:3 = 1

我複製它工作得很好的文件從工作多形式的處理程序處理的一部分,但很顯然,

file, header, err := r.FormFile("uploadfile") 

不能被翻譯成JSON處理。

我看了杜松子酒文檔,但找不到涉及json文件處理的例子。 那麼我該如何解決這個問題?

回答

2

在你的代碼說var json Article其中類型的文章被定義爲

type Article struct { 
    Title string `json:"title"` 
    Body string `json:"body"` 
    File []byte `json:"file"` 
} 

和文件是[]byte類型。類型字節不超過它所持有

Article.File是不一樣的r.FormFile其中FormFile是返回3項

的方法所以file, header, err := json.Filefile, header, err := r.FormFile("foo")

見實施返回其他任何和方法描述來自godocs - >here

+0

對,那麼如何修復我的代碼來獲取文件? – Karlom

+0

你應該通過杜松子酒的文檔..這裏是文檔中顯示杜松子酒FormFile的方法https://godoc.org/github.com/gin-gonic/gin#Context.FormFile和這筆交易與上傳https://godoc.org/github.com/gin-gonic/gin#Context.MultipartForm ..其所有在那裏花時間,並瞭解文檔。 – reticentroot

+0

仍然無法弄清楚如何做到這一點。我需要一個例子。 – Karlom