使用Golang Gin检索已发布的文件

7
我已经使用Golang框架Gin有一段时间了,没有遇到任何问题,但现在我需要处理上传到我的API的图像。
我可能可以想办法验证、调整大小和存储图像,但目前我只是在努力弄清楚如何抓取上传的文件并将其分配给一个变量。
我查看了Gin API文档,但没有找到解决方法。
我使用以下命令来curl我的API(这可能是错误的?)...
$ time curl -X POST --form upload=@ss.png -H "Content-Type: application/json"  --cookie 'session=23423v243v25c08efb5805a09b5f288329003' "http://127.0.0.1:8080/v1.0/icon" --form data='{"json_name":"test json name","title":"Test","url":"http://sometest.com"}'

我想澄清一下,在上面的curl命令中,您是想将PNG文件分配给一个变量还是作为POST请求的正文内容? - Kunal Jha
@KunalJha 我想要获取并操作已经被POST到我的API的图片。上述curl命令只是我尝试POST图片的一种方式。 - Aaron Kenny
2个回答

16

我会尝试回答如何检索文件名并将其分配给变量,因为处理JSON部分已经由@AlexAtNet处理。 如果这个方法适合您,请告诉我。

    func (c *gin.Context) {

        file, header , err := c.Request.FormFile("upload")
        filename := header.Filename
        fmt.Println(header.Filename)
        out, err := os.Create("./tmp/"+filename+".png")
        if err != nil {
            log.Fatal(err)
        }
        defer out.Close()
        _, err = io.Copy(out, file)
        if err != nil {
            log.Fatal(err)
        }   
    }

非常感谢Kunal,我只需要将头信息类型更改为 -H "Content-Type: multipart/form-data" - Aaron Kenny
你有多个文件的代码片段吗? - JorgeGarza

1
尝试从gin.Context获取HTTP请求并从其Body属性中读取:
func(c *gin.Context) {
    decoder := json.NewDecoder(c.Request.Body)
    var t struct {
      Name string `json:"json_name"`
      Title string `json:"title"`
      Url string `json:"url"`
    }
    err := decoder.Decode(&t)
    if err != nil {
        panic()
    }
    log.Println(t)
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接