egg接收文件上传

21 篇文章 1 订阅
9 篇文章 1 订阅

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);
  }
}
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值