如何使用 vue 在一个请求中发送 json 参数和 multipart/form-data 文件

Posted

技术标签:

【中文标题】如何使用 vue 在一个请求中发送 json 参数和 multipart/form-data 文件【英文标题】:How to send json parameter and multipart/form-data file in one request with vue 【发布时间】:2020-03-04 05:00:27 【问题描述】:

如何像邮递员一样用vue在一个请求中发送json参数和multipart/form-data文件?

我搜索了how to submit "multipart/form-data" from VueJs 。我想要的是多部分格式的图像文件,以及一个 json 对象中的其他参数(内容类型为 json)。所有参数都作为单个 http 请求发送。

主要区别是如何在单个http post请求中发送json参数和multipart文件?

【问题讨论】:

how to submit "multipart/form-data" from VueJs的可能重复 @MartenCatcher 我已经搜索了这个问题。我想要多部分格式的图像文件,以及 json 中的其他参数。所有参数都作为单个 http 请求发送。 @user7328234 你不能在一个请求中发送 multipart 和 json,那是行不通的。将参数添加到多部分请求中更容易 【参考方案1】:

我也遇到了同样的问题,我想分享我所做的。 我正在尝试上传图片、种类、名称和 eventID。

let logo1 = new FormData
logo1.append('image', this.logo1)
logo1.append('kind', 'logo1')
logo1.append('name', this.$refs.logo1.files[0].name )
logo1.append('eventID',eventID)


axios.post(`/upload`, logo1,
            
   
      headers:
          'Authorization' : `$token`,
          'Content-Type': `multipart/form-data; boundary=$logo1._boundary` 
  ,    

  ).then((res) => 

     console.log(res)


  ).catch((error) => 

    console.log(error)

  )

注意:postdata 参数格式应该是 (url, FormData) 而不是 (url, data: FormData)

【讨论】:

【参考方案2】:

首先,这不是一个vue相关的问题。 this answer 有一个解决方案。另一种解决方案(如果请求中的内容类型不是优先级)是使用简单的 FormData。您可以轻松插入图像并将 json 作为纯文本发送。但是,这需要在服务器端对您的模型进行额外的解析/映射。

【讨论】:

以上是关于如何使用 vue 在一个请求中发送 json 参数和 multipart/form-data 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Vue.js 2 中发送 JSON 数据作为响应?

如何在 Swift 3 中使用 Alamofire 在 POST 请求中将给定的 JSON 作为参数发送?

Vue在axios post请求的对象中发送一个空参数

如何在 alamofire 发布请求中发送 JSON 变量作为参数

vue中post请求报400的解决

如何在 Slim 中访问 POST 请求的 JSON 请求正文?