返回

通过egg.js快速搭建文件上传后端

后端

前言

在现代网络应用中,文件上传是不可或缺的功能之一。它允许用户将本地文件上传到服务器,以便进行存储、处理或共享。在egg.js框架中,文件上传的实现非常简单,开发者只需通过简单的配置和几行代码即可完成。

一、环境准备

在开始之前,我们需要先确保已安装并配置好egg.js框架。如果尚未安装,可通过以下命令进行安装:

npm install egg -g

安装完成后,即可通过以下命令创建新的egg.js项目:

egg init my-app

其中my-app为项目的名称,可根据实际情况进行修改。

创建项目后,我们还需要安装egg-multipart插件,以便支持文件上传功能。可以通过以下命令进行安装:

npm install egg-multipart --save

二、配置

在完成环境准备后,我们需要在项目中进行一些配置。首先,我们需要在config/config.default.js文件中配置文件上传的存储路径:

exports.multipart = {
  fileSize: '50mb',
  mode: 'file',
  fileLimit: 10,
  whitelist: ['.jpg', '.jpeg', '.png', '.gif'],
  dir: '/var/www/myapp/uploads',
  cleanSchedule: {
    // 干净的垃圾桶
    cron: '0 30 3 * * *',
    interval: 24 * 60 * 60 * 1000 // 每天
  }
};

其中:

  • fileSize:允许上传的文件最大尺寸,默认值为50mb
  • mode:文件存储方式,有filestream两种模式,默认值为file
  • fileLimit:允许同时上传的文件数量,默认值为10
  • whitelist:允许上传的文件类型,默认值为['.jpg', '.jpeg', '.png', '.gif']
  • dir:文件上传的存储路径,默认值为/tmp/egg-multipart-uploads
  • cleanSchedule:定时清理上传的文件,默认情况下每天清理一次。

如果需要使用阿里云OSS或七牛云存储等第三方存储服务,则需要在config/plugin.js文件中进行配置:

exports.oss = {
  enable: true,
  package: 'egg-oss',
};

其中:

  • enable:是否启用OSS存储,默认值为false
  • package:OSS存储的插件包名,默认值为egg-oss

三、代码实现

在完成配置后,我们就可以开始编写文件上传的代码了。首先,我们需要在路由文件中添加如下代码:

exports.router.post('/upload', async (ctx) => {
  const files = ctx.req.files;
  if (!files) {
    ctx.body = {
      code: 400,
      message: 'No file uploaded',
    };
    return;
  }

  // 处理文件上传
  const file = files[0];
  const result = await ctx.oss.put(file.fieldname, file.filepath);

  // 返回上传结果
  ctx.body = {
    code: 200,
    message: 'File uploaded successfully',
    data: {
      url: result.url,
    },
  };
});

其中:

  • ctx.req.files:包含了所有上传的文件信息。
  • files[0]:获取第一个上传的文件信息。
  • ctx.oss.put():将文件上传到OSS存储。
  • result.url:上传后的文件URL。

四、测试

完成代码编写后,我们可以通过以下命令启动项目:

npm start

然后,就可以使用Postman或其他HTTP客户端工具测试文件上传功能了。

五、总结

通过以上步骤,我们就可以快速搭建一个文件上传的后端程序。egg.js框架提供了简单易用的文件上传功能,可以帮助开发者快速完成文件上传需求。