NodeJs模拟表单提交上传文件
关于NodeJs中如何模拟表单上传文件的问题,踩了好多坑,才跑通,记下备忘。
NodeJs 使用 axios 作为网络框架,在 axios 表单提交,需要借助 form-data 包来实现。
下面 demo 中有两种上传图片的方式:一种是本地图片,另一种是远程网络图片。
本地图片策略:通过 node 的 fs 包读取本地文件作为二进制文件;
远程图片策略:通过 request 网络包(axios也可实现)将网络图片加载成二进制文件。
const axios = require('axios');
const fs = require('fs');
const request = require('request');
const FormData = require('form-data');
let formData = new FormData();
formData.append('id', 'xxx');
formData.append('name', 'xxx');
formData.append('image-file', fs.createReadStream('./cover.png')); // local image
// formData.append('image-file', request(imgUrl)); // remote image
await axios({
url: url,
data: formData,
method: 'post',
maxContentLength: Infinity,
maxBodyLength: Infinity,
headers: {
...formData.getHeaders(), // 之前一直没调试通过,随后发现,这里或许是关键
'Cookie': cookie,
}
})
跑通后,写了一个回答,希望对其他朋友有用!