英文:
retrieving posted files using Golang Gin
问题
我现在使用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"}'
英文:
I'm using the Golang framework Gin for a while now with no issues but I now need to process images posted to my API.
I can probably figure out how to deal with validating, resizing and storing the image but for now I'm just struggling to figure out how to grab the posted file and assign it to a variable.
I've looked at the Gin API docs but nothing is jumping out at me.
I'm curling my API as follows (this might be wrong?)...
$ 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"}'
答案1
得分: 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)
}
}
请注意,这是一段Go语言代码,用于处理文件上传。它从请求中获取名为"upload"的文件,并将文件名分配给变量"filename"。然后,它创建一个新文件,并将上传的文件内容复制到新文件中。
英文:
I will try to just answer the retrieving the filename and assigning it to the variable, because handling the json part is already taken care by @AlexAtNet.
Let me know if this works for you
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)
}
}
答案2
得分: 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)
}
请注意,这是一个Go语言的代码示例,用于从gin.Context中获取HTTP请求并读取其Body属性中的数据。在这个示例中,我们使用了json.Decoder来解码JSON数据,并将解码后的结果存储在一个结构体变量t中。如果解码过程中出现错误,我们会抛出一个异常。最后,我们使用log.Println来打印结构体变量t的内容。
英文:
Try to get the HTTP request from the gin.Context and read from its Body property:
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)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论