推荐答案
// www.javascriptcn.com code example
const Koa = require('koa');
const koaBody = require('koa-body');
const fs = require('fs');
const path = require('path');
const app = new Koa();
app.use(koaBody({
multipart: true, // 启用文件上传
formidable: {
uploadDir: path.join(__dirname, 'uploads'), // 设置文件上传目录
keepExtensions: true, // 保留文件扩展名
maxFileSize: 200 * 1024 * 1024, // 设置上传文件大小限制
}
}));
app.use(async (ctx) => {
if (ctx.method === 'POST' && ctx.url === '/upload') {
const file = ctx.request.files.file; // 获取上传的文件
const reader = fs.createReadStream(file.path);
const stream = fs.createWriteStream(path.join(__dirname, 'uploads', file.name));
reader.pipe(stream);
console.log('uploading %s -> %s', file.name, stream.path);
ctx.body = 'Upload Success!';
}
});
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});本题详细解读
1. 安装 koa-body 中间件
首先,你需要安装 koa-body 中间件,它可以帮助你处理文件上传。
npm install koa-body
2. 配置 koa-body 中间件
在 Koa 应用中,使用 koa-body 中间件来处理文件上传。你需要设置 multipart: true 来启用文件上传功能,并通过 formidable 配置项来设置文件上传的相关参数。
uploadDir: 指定文件上传的目录。keepExtensions: 是否保留文件的扩展名。maxFileSize: 设置上传文件的最大大小。
3. 处理文件上传请求
在路由处理函数中,你可以通过 ctx.request.files 来获取上传的文件。ctx.request.files.file 表示上传的文件对象,其中 file.path 是文件的临时路径,file.name 是文件的原始名称。
4. 保存上传的文件
使用 fs.createReadStream 读取临时文件,并通过 fs.createWriteStream 将文件写入到指定的目录中。通过 reader.pipe(stream) 将文件流从临时路径写入到目标路径。
5. 返回响应
文件上传成功后,返回一个成功的响应给客户端。
6. 启动服务器
最后,启动 Koa 服务器,监听指定的端口。
通过以上步骤,你可以使用 koa-body 中间件轻松处理文件上传。