使用koa-body实现文件上传下载

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/meifannao789456/article/details/88662840

在前端中上传文件,我们都是通过表单来上传,而上传的文件,在服务器端并不能像普通参数一样通过 ctx.request.body 获取。我们可以用 koa-body 中间件来处理文件上传,它可以将请求体拼到 ctx.request 中。

首先在app.js中使用koa-body:

// app.js
const koa = require('koa');
const app = new koa();
const koaBody = require('koa-body');

app.use(koaBody({
    multipart: true,
    formidable: {
        maxFileSize: 200*1024*1024	// 设置上传文件大小最大限制,默认2M
    }
}));

实现文件上传:

  async uploaddb(ctx) {
  // 获取文件内容
    const file = ctx.request.body.files.file;
    // 创建文件流
    const reader = fs.createReadStream(file.path);
    // 处理文件写入路径
    const path = getBackupsPath(file.name.split(".")[0]);
    // 创建写入流
    const upStream = fs.createWriteStream(path);
    // 数据写入文件
    reader.pipe(upStream);
    return ctx.body = '上传成功';
  }

实现文件下载:

  async downloaddb(ctx) {
  // 获取下载文件的名称
    let filename = ctx.request.query.file;
    // 获取下载文件路径
    var filePath = getBackupsPath(filename);
    var stats = fs.statSync(filePath);
    ctx.set('Content-Type', 'application/octet-stream');
    ctx.set('Content-Disposition', 'attachment; filename=' + filename);
    ctx.set('Content-Length', stats.size);
    return ctx.body = fs.createReadStream(filePath);
  }

扫码关注微信公众号,更好的交流
扫码关注微信公众号,更好的交流

猜你喜欢

转载自blog.csdn.net/meifannao789456/article/details/88662840