返回

剖析Egg——(8)文件上传和图片处理

前端

大家好,今天我们继续来学习eggjs框架,在前面的文章中,我们已经讲解了增删改查的功能,并使用了数据库来存储数据。但是实际开发中,除了文字数据外,图片等文件也是非常重要的数据类型,所以今天这篇文章,我们就来学习如何使用eggjs进行文件上传和图片处理。

一、文件上传

在前端,我们使用input标签的file属性来选择需要上传的文件,然后使用form表单提交。在服务器端,我们可以使用Egg.js中的multer中间件来处理文件上传。Multer是一个强大的文件上传中间件,它可以帮助我们轻松地处理各种文件上传场景。

安装multer:

npm install --save multer

配置multer:

const multer = require('multer');

const storage = multer.diskStorage({
  destination: 'public/uploads',
  filename: (req, file, cb) => {
    cb(null, Date.now() + '-' + file.originalname);
  }
});

const upload = multer({ storage });

在路由中使用multer:

router.post('/upload', upload.single('avatar'), async (ctx, next) => {
  ctx.body = {
    code: 0,
    message: '上传成功',
    data: ctx.req.file
  };
});

这样,我们就可以实现文件上传功能了。

二、图片处理

有时候,我们需要对上传的图片进行一些处理,比如裁剪、缩放、加水印等。在Egg.js中,我们可以使用sharp库来进行图片处理。Sharp是一个强大的图片处理库,它可以帮助我们轻松地完成各种图片处理任务。

安装sharp:

npm install --save sharp

使用sharp:

const sharp = require('sharp');

sharp('public/uploads/1659888012345-image.png')
  .resize(200, 200)
  .toFile('public/uploads/1659888012345-image-200x200.png', (err, info) => {
    if (err) {
      console.log(err);
    } else {
      console.log('图片处理成功');
    }
  });

这样,我们就可以实现图片处理功能了。

三、总结

以上就是今天的内容,我们学习了如何使用Egg.js进行文件上传和图片处理。希望大家能够学以致用,在自己的项目中实现这些功能。