koa2路由请求使用formidable接收formdata文件并复制保存在本地
时间: 2024-05-12 08:19:04 浏览: 96
jQuery+koa2实现简单的Ajax请求的示例
在koa2中,可以使用formidable模块来接收formdata类型的文件上传请求,并将文件复制保存在本地。具体步骤如下:
1. 安装formidable模块,执行命令:npm install formidable
2. 在koa2的路由处理函数中,使用formidable来解析请求中的formdata数据,并将文件保存在本地。示例代码如下:
```
const Koa = require('koa');
const Router = require('koa-router');
const formidable = require('formidable');
const fs = require('fs');
const path = require('path');
const app = new Koa();
const router = new Router();
router.post('/upload', async (ctx) => {
// 创建formidable表单解析器
const form = new formidable.IncomingForm();
// 设置上传目录
form.uploadDir = path.join(__dirname, 'uploads');
// 保留上传文件的扩展名
form.keepExtensions = true;
// 解析请求中的formdata数据
const { files } = await new Promise((resolve, reject) => {
form.parse(ctx.req, (err, fields, files) => {
if (err) {
reject(err);
} else {
resolve({ fields, files });
}
});
});
// 将文件保存到本地
const { path: filePath, name } = files.file;
const newFilePath = path.join(form.uploadDir, name);
fs.copyFileSync(filePath, newFilePath);
// 返回上传成功消息
ctx.body = '上传成功';
});
app.use(router.routes()).use(router.allowedMethods());
app.listen(3000, () => {
console.log('server is running at http://localhost:3000');
});
```
在上述代码中,我们首先创建了一个formidable表单解析器,并设置了上传目录和保留上传文件的扩展名的选项。然后,我们调用form.parse方法来解析请求中的formdata数据,并将解析结果保存在files变量中。接着,我们将上传的文件复制保存在本地,最后返回上传成功消息。注意,在koa2中,我们需要使用await关键字来等待form.parse方法的返回结果。
阅读全文