文件上传是前端开发中常见的需求之一,而 Koa2 是一款轻量级的 Node.js Web 框架,它提供了非常方便的文件上传功能。本文将介绍 Koa2 文件上传的实现方式,包括如何处理文件上传、如何限制上传文件的大小和类型等。
处理文件上传
Koa2 的文件上传需要依赖 koa-body 中间件。koa-body 支持多种文件上传方式,包括 form 表单上传和 Ajax 上传等。以下是一个简单的文件上传示例:
const Koa = require('koa'); const koaBody = require('koa-body'); const app = new Koa(); app.use(koaBody({ multipart: true, formidable: { maxFileSize: 200 * 1024 * 1024 // 限制上传文件的大小为 200MB } })); app.use(async (ctx) => { const file = ctx.request.files.file; // 处理上传的文件 }); app.listen(3000);
在上面的示例中,我们通过 koaBody
中间件来处理文件上传。multipart: true
表示启用 multipart/form-data 解析,formidable
配置项用于设置上传文件的大小限制。ctx.request.files.file
表示获取名为 file
的文件对象,可以通过该对象的 path
属性获取上传文件的路径,进而进行文件处理。
限制上传文件的大小和类型
在实际项目中,我们需要对上传的文件进行限制,以防止上传过大或不合法的文件。Koa2 的 koa-body 中间件提供了多种配置项来限制上传文件的大小和类型。
限制上传文件的大小
我们可以通过 formidable
配置项中的 maxFileSize
来限制上传文件的大小。例如,以下配置将限制上传文件的大小为 200MB:
app.use(koaBody({ multipart: true, formidable: { maxFileSize: 200 * 1024 * 1024 // 限制上传文件的大小为 200MB } }));
限制上传文件的类型
我们可以通过 formidable
配置项中的 keepExtensions
和 multiples
来限制上传文件的类型。例如,以下配置将限制只能上传扩展名为 .png
、.jpg
和 .gif
的文件:
app.use(koaBody({ multipart: true, formidable: { keepExtensions: true, // 保留文件扩展名 multiples: false, // 不允许上传多个文件 onFileBegin: (name, file) => { // 检查文件扩展名 if (!/\.(png|jpe?g|gif)$/i.test(file.name)) { throw new Error('只允许上传 PNG、JPG 和 GIF 格式的图片'); } } } }));
在上面的示例中,我们通过 onFileBegin
回调函数来检查上传文件的扩展名,如果不符合要求,则抛出错误。
总结
本文介绍了 Koa2 文件上传的实现方式,包括如何处理文件上传、如何限制上传文件的大小和类型等。在实际项目中,我们需要根据需求来进行相应的配置,以保证上传文件的安全性和合法性。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65bcc411add4f0e0ff5b8020