版权声明:本文为博主原创文章,未经博主允许不得转载。 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);
}
扫码关注微信公众号,更好的交流