file模式接收文件
配置文件
config.multipart = {
/** 文件接收配置 */
mode: 'file',
tmpdir: path.resolve(workerPath, '../serverFiles/temporaryFile'),
cleanSchedule: {
cron: '0 0 4 * * *',
},
fileSize: '100mb',
whitelist() {
return true;
},
/** 文件接收配置 */
};
接收文件
const { ctx, service } = this;
req.files = ctx.request.files;
其中files就是文件信息的数组
stream模式接收文件
配置文件
config.multipart = {
fileSize: '100mb',
whitelist() {
return true;
},
};
接收一个文件
const stream = await ctx.getFileStream();
// 保存文件,或者使用文件流做别的事情
await streamToFile(stream, saveFilePath);
文件流转文件的方法
function streamToFile(stream, saveFilePath) {
return new Promise((res, rej) => {
const ws = fs.createWriteStream(saveFilePath);
stream.pipe(ws).on('finish', () => {
console.log(`========= ${saveFilePath} pipe finish =========`);
res(saveFilePath);
});
ws.on('error', err => {
console.log(`========= ${saveFilePath} pipe error =========`);
rej(err);
});
});
}
接收多个文件
const streams = await ctx.multipart();
let stream = null;
const req = {};
while ((stream = await streams())) {
if (stream.length) {
// 处理其他参数
req[stream[0]] = stream[1];
} else {
if (!stream.filename) continue;
// 保存文件,或者使用文件流做别的事情
await fsHandle.streamToFile(stream, saveFilePath);
}
}