gin 解析 formData带文件和json字符串的一起的方式

基础不好真的难受,这点问题折腾半天…

网上看到很多单独解析文件的,网上的资料确实都能找到。但是结合gin解析文件和json字符串(或其他类型的参数,但字符串最好)一起的,就不好找。

需求是前端使用Content-Type: multipart/form-data的形式上传文件以及需要的参数。后端使用golang 的gin 框架解析这两种参数。

零零散散的找了一晚上资料,总算解决了。

前端参数传输要求

例如我使用axios,重点是对象得转成json字符串去传输,因为在formdata形势下axios不会帮忙转化为字符串了。

    let formData = new FormData();
    // img.file是个文件对象
    formData.append("file", img.file);
    // img.color是个结构体,需要转成json字符串
    formData.append("color", JSON.stringify(img.color));
    // 这里甚至不需要指定Content-Type: multipart/form-data请求头,它会自动识别
    return post<string>(baseUrl + "cardChangeBGColor", formData);

gin解析

有两种方式:

//c 是 *gin.Context
// 直接用PostForm就能获取json字符串
colorStr := c.PostForm("color")
// 然后转成byte数组去解析
json.Unmarshal([]byte(colorStr), &(ch.Color))

还有一种,这种比较细,折磨了一晚上

c.Request.ParseMultipartForm(2<<10)
colorStr := c.Request.FormValue("color")
json.Unmarshal([]byte(colorStr), &(ch.Color))
fileRead, file, err := c.Request.FormFile("file")

这里的细节是使用ParseForm还是ParseMultipartForm的问题,一般使用可能没注意,感觉都没啥区别,如果仅仅是解析文件,那么两个都能用,但是你还想c.Request.FormValue("color")这样获取不是文件类型的参数,那么这里就必须使用ParseMultipartForm。否则只能读取到文件。

所以,这里建议直接使用 c.PostForm("color")更简单点。

折磨!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lsjweiyi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值