2017-03-17 22 views
0

我創建了一個使用金酒包的API,並且我被卡在文件上傳處理程序中。 這裏是我的代碼:Gin-Gonic文件上傳mime錯誤

func postPicture(c *gin.Context) { 
    id, ok := c.Params.Get("fileId") 
    if !ok {...} // Err Handling 
    user, ok := c.Params.Get("user") 
    if !ok {...} // Err Handling 
    file, _, err := c.Request.FormFile("file") // Here is the bug 
    if err != nil { 
     Common.Debug("Error: " + err.Error()) 
     c.JSON(http.StatusBadRequest, Common.JsonError{"Error", err.Error()}) 
     return 
    } // Err Handling 

    path := "./Files/" + user + "/pictures" 
    filename := id + ".jpg" 
    if _, err := os.Stat(path); os.IsNotExist(err) { 
     os.Mkdir(path, 0755) 
    } 
    out, err := os.Create(path + "/" + filename) 
    if err != nil {...} // Err Handling 
    defer out.Close() 

    _, err = io.Copy(out, file) 
    if err != nil {...} // Err Handling 
    c.JSON(http.StatusAccepted, gin.H{}) 

}

錯誤是c.Request.FormFile(),它返回我 「默:無效的媒體參數」 無論請求。我試過如下:

curl -X POST --form upload=C:\Users\meiche_j\Pictures\Capture.PNG -H "Content-Type: multipart/form-data;boundary=???" "http://127.0.0.1:3003/postFiles/picture/58cbb5627067500f58834f69/fileIdTest" 


curl -X POST --form upload=C:\Users\meiche_j\Pictures\Capture.PNG -H "Content-Type: multipart/form-data;boundary=???;Content-Disposition: attachment; filename=file" "http://127.0.0.1:3003/postFiles/picture/58cbb5627067500f58834f69/fileIdTest" 


curl -X POST --form upload=C:\Users\meiche_j\Pictures\Capture.PNG -H "Content-Type: multipart/form-data;boundary=???;Content-Disposition: form-data; filename=file" "http://127.0.0.1:3003/postFiles/picture/58cbb5627067500f58834f69/fileIdTest" 

我不認爲是錯誤的代碼,但我找不到什麼請求頭丟失,任何想法?

+0

您可以嘗試使用「給力」內容的捲曲請求'部分爲文件,用@符號作爲文件名的前綴'即捲曲-X POST --form file = @ C:\ Users \ meiche_j \ Pictures \ Capture.PNG .... –

回答

3

你讓多個小錯誤在你的代碼,並在您的測試:

  1. 您應該c.Request.FormFile("file")使用正確的密鑰,在這裏你使用file爲關鍵,但你在關鍵--form upload=...捲曲要求使用upload

  2. 你應該在你捲曲的要求使用@curl -X POST --form [email protected]:\Users\meiche_j\Pictures\Capture.PNG,表明要對文件的內容轉移,而不僅僅是路徑

  3. 你應該避免自己把邊界參數在捲曲請求,不喜歡

    curl -X POST -F [email protected] -H 'Content-Type: multipart/form-data' "http://127.0.0.1:3003/postFiles/picture/58cbb5627067500f58834f69/fileIdTest" 
    

希望這一直是有用的