2017-03-17 160 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" 
    

希望这一直是有用的