返回
Egg.js 实现文件上传:单文件、多文件、日期存储
前端
2023-11-24 04:17:13
使用 Egg.js 实现高效文件上传:单文件、多文件和日期存储
在当今数据驱动的时代,文件上传是许多 Web 应用程序的重要功能。Egg.js 作为 Node.js 框架,提供了便捷的 API 来处理文件上传,使开发者能够轻松集成此功能。本文将深入探讨如何在 Egg.js 中实现单文件上传、多文件上传以及根据日期存储上传文件。
单文件上传:简单而有效
单文件上传是指一次只上传一个文件。Egg.js 使其变得非常简单。只需在控制器中定义一个路由并处理上传的文件:
// routes/upload.js
module.exports = app => {
app.post('/upload', async (ctx) => {
// 获取文件信息
const file = ctx.request.files[0];
// 存储文件到本地
const filepath = await ctx.oss.put(file.filename, file.filepath);
// 返回上传成功的信息
ctx.body = {
success: true,
filepath,
};
});
};
这段代码将获取上传的文件信息,存储到本地,然后返回上传成功的信息。
多文件上传:一次性上传多个文件
多文件上传与单文件上传类似,但需要处理多个文件:
// routes/upload.js
module.exports = app => {
app.post('/upload', async (ctx) => {
// 获取文件信息
const files = ctx.request.files;
// 存储文件到本地
const filepaths = [];
for (const file of files) {
const filepath = await ctx.oss.put(file.filename, file.filepath);
filepaths.push(filepath);
}
// 返回上传成功的信息
ctx.body = {
success: true,
filepaths,
};
});
};
这段代码将获取多个上传的文件,存储到本地,然后返回上传成功的信息。
按照日期存储:井然有序的文件管理
为了方便管理和查找上传的文件,我们可以按照日期进行存储。Egg.js 提供了 saveDir
配置项,可以实现此功能:
// config/config.default.js
exports.multipart = {
fileSize: '5mb',
mode: 'file',
saveDir: 'app/public/uploads/{{yymmdd}}',
};
其中,{{yymmdd}}
表示日期格式,表示按照年、月、日进行存储。这样,上传的文件将被存储在 app/public/uploads/20230101
等目录中。
结论:强大的文件上传功能
通过本文介绍的方法,开发者可以在 Egg.js 中轻松实现文件上传需求,包括单文件上传、多文件上传和日期存储。这些功能对于构建文件管理系统、图片库等应用场景至关重要。Egg.js 提供了完善的 API 和丰富的插件,使开发者可以快速、高效地实现这些需求。
常见问题解答:
-
如何设置文件上传大小限制?
- 在
config/config.default.js
中的multipart
配置项中设置fileSize
属性。
- 在
-
可以自定义上传的文件存储路径吗?
- 是的,可以使用
saveDir
配置项指定自定义的存储路径。
- 是的,可以使用
-
如何获取上传文件的原始文件名?
- 可以在
file.filename
属性中获取上传文件的原始文件名。
- 可以在
-
如何处理上传过程中发生的错误?
- 可以使用
try...catch
语句或ctx.onerror
监听器来处理上传过程中发生的错误。
- 可以使用
-
是否支持跨域文件上传?
- 是的,Egg.js 支持跨域文件上传。需要在
config/config.default.js
中配置跨域设置。
- 是的,Egg.js 支持跨域文件上传。需要在