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,
    }
})

跑通后,写了一个回答,希望对其他朋友有用!