Javascript提交multipart/form-data的数据

最近在写一个前端的应用,需要调用后端的一个API HTTP POST接口,这个接口是接收multipart/form-data的,也就是会将表单的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件。当上传的字段是文件时,会有Content-Type来表名文件类型;content-disposition,用来说明字段的一些信息;由于有boundary隔离,所以multipart/form-data既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件。

以下是我要调用的后端接口的数据格式的例子,可以看到boundary是'--28319d96a8c54b529aa9159ad75edef9':

--28319d96a8c54b529aa9159ad75edef9
Content-Disposition: form-data; name="deployment-name"

aName
--28319d96a8c54b529aa9159ad75edef9
Content-Disposition: form-data; name="enable-duplicate-filtering"

true
--28319d96a8c54b529aa9159ad75edef9
Content-Disposition: form-data; name="deployment-source"

process application
--28319d96a8c54b529aa9159ad75edef9
Content-Disposition: form-data; name="deployment-activation-time"

2030-11-11T11:11:11.000+0200
--28319d96a8c54b529aa9159ad75edef9
Content-Disposition: form-data; name="data"; filename="test.bpmn"

<?xml version="1.0" encoding="UTF-8"?>
<bpmn2:definitions ...>
  <!-- BPMN 2.0 XML omitted -->
</bpmn2:definitions>
--28319d96a8c54b529aa9159ad75edef9--

我的前端应用是根据用户输入的模型,产生了对应的XML代码,需要把这个XML代码上传给后端的接口。通常的做法是直接上传一个文件,但是我这里并没有生成一个文件,因此需要把XML的数据封装在一个文件中再上传。以下是代码片段,这里用axios来调用接口:

const file = new File([xml_data], "diagram.bpmn", {type: "text/plain"});
const data = new FormData();
data.append("deployment-name", process_name);
data.append("deployment-source", "process application");
data.append("data", file);
axios.post(
  'http://localhost:8080/engine-rest/deployment/create', 
  data, 
  {headers: {'Content-Type':'multipart/form-data'}}
  ).then(
    res=>{
      console.log('res=>', res);
      if (res.status==200) {
        alert("部署成功,点击链接查看:"+res.data.links[0].href);
      }
    }
  )
)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

gzroy

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

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

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

打赏作者

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

抵扣说明:

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

余额充值