eggjs 接收不到 ctx.multipart(),怀疑是前端代码参数有问题,但是网上找了很多参数的写法,都接收不到,不知道该怎么写了。
前端代码:
// electron nodejs 环境,根据文件路径,把文件上传到服务器(静默上传)
const FormData = require("form-data");
let data = new FormData();
data.append("file1", fs.createReadStream("D:\\111.tx"), "111.tx");
data.append("file2", fs.createReadStream("D:\\222.tx"), "222.tx");
Axios.post("/api/uploadFile", data, {
headers: {
"x-csrf-token": Util.GetCookie("csrfToken"),
"Content-Type": `multipart/form-data; boundary=${data._boundary}`,
},
});
eggjs代码:
// 处理 /api/uploadFile ,参数是controller传递过来的 this.ctx
static UpLoadFile(ctx: any) {
const parts = ctx.multipart(); // 此处接收不到parts
let part;
while ((part = await parts()) != null) {
if (part.length) {
// 这是 busboy 的字段
console.log('field: ' + part[0]);
console.log('value: ' + part[1]);
console.log('valueTruncated: ' + part[2]);
console.log('fieldnameTruncated: ' + part[3]);
} else {
// 这时是用户没有选择文件就点击了上传(part 是 file stream,但是 part.filename 为空)
// 需要做出处理,例如给出错误提示消息
if (!part.filename) throw "上传参数不对";
// // part 是上传的文件流
// console.log('field: ' + part.fieldname);
// console.log('filename: ' + part.filename);
// console.log('encoding: ' + part.encoding);
// console.log('mime: ' + part.mime);
// 文件处理,上传到云存储等等
}
}
}
要实现的功能:electron 检测到本地文件有变更后,直接把文件上传到服务器