node 接收、发送 form-data 数据
一、背景:node 作为中间层服务转发数据,接收客户端图片,并传至其他服务器。(基于 koa2 框架、node-fetch)
二、转发前端传过来的包含图片的 form-data 数据:
(1)解析:用 koa2-multiparty 中间件解析客户端传过来的 form-data(注意:只对上传文件的接口使用该中间件,文件会存在本地磁盘,用完可清空,详情见 文档)。文件从 ctx.req.files 取,其他参数从 ctx.req.body 取。文件数据会缓存在本地磁盘。
(2)封装:将数据封装成 form-data 。先从本地读取缓存文件:const file = fs.createReadStream(tempPath) (tempPath 从 ctx.req.files 中取出。再依次封装,代码如下:
const FormData = require('form-data');
const form = new FormData();
form.append('a', 1);
form.append('file', file);
(3)发送:
const fetch = require('node-fetch');
fetch(url, {
headers: form.getHeaders(), // getHeaders() 返回带 boundary 的 content-type,实验时,必须带上该 bound 后端才能解析
method: 'POST',
body: form
})
参考文档:
https://github.com/request/request#forms
https://github.com/form-data/form-data
https://github.com/bitinn/node-fetch#post-with-form-data-detect-multipart