返回

Egg.js 实现文件上传:单文件、多文件、日期存储

前端

使用 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 和丰富的插件,使开发者可以快速、高效地实现这些需求。

常见问题解答:

  1. 如何设置文件上传大小限制?

    • config/config.default.js 中的 multipart 配置项中设置 fileSize 属性。
  2. 可以自定义上传的文件存储路径吗?

    • 是的,可以使用 saveDir 配置项指定自定义的存储路径。
  3. 如何获取上传文件的原始文件名?

    • 可以在 file.filename 属性中获取上传文件的原始文件名。
  4. 如何处理上传过程中发生的错误?

    • 可以使用 try...catch 语句或 ctx.onerror 监听器来处理上传过程中发生的错误。
  5. 是否支持跨域文件上传?

    • 是的,Egg.js 支持跨域文件上传。需要在 config/config.default.js 中配置跨域设置。