You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在显示multer-gridfs-storage存储的图片时调整尺寸?

如何在显示multer-gridfs-storage存储的图片时调整尺寸?

当然可以在这个路由里实现图片尺寸调整!最方便高效的方案是用sharp这个Node.js图片处理库——它性能优异、API简洁,完美适配这种流式处理场景。下面是具体实现步骤:


1. 安装依赖

首先安装sharp模块:

npm install sharp

2. 修改路由代码

先引入sharp,然后在读取文件流的环节加入尺寸处理逻辑。同时我会修正你原代码里的一个小bug(img/png的类型判断错误):

const sharp = require('sharp');
// ... 保留你原有的其他依赖引入

router.get("/image/:filename", (req, res) => {
  gfs.files.findOne({ filename: req.params.filename }, (err, file) => {
    if (err) {
      return res.status(500).json({ err: '查询文件失败' });
    }
    if (!file || file.length === 0) {
      return res.status(404).json({ err: "No file exist" });
    }

    // 修正图片类型判断的错误,确保覆盖正确的MIME类型
    const validImageTypes = ['image/jpeg', 'image/png'];
    if (!validImageTypes.includes(file.contentType)) {
      return res.status(404).json({ err: "Not an image" });
    }

    // 创建GridFS读取流
    const readstream = gfs.createReadStream(file.filename);

    // 用sharp调整尺寸:这里示例设置宽度为300px,高度自适应
    // 你可以根据需求修改参数,比如固定宽高、裁剪、调整质量等
    const imageProcessor = sharp().resize(300);

    // 流式处理:读取流 → sharp处理 → 输出到响应
    readstream.pipe(imageProcessor)
      .on('error', (processErr) => {
        console.error('图片处理错误:', processErr);
        res.status(500).json({ err: '图片处理失败' });
      })
      .pipe(res);
  });
});

3. 扩展:支持前端自定义尺寸

如果想让前端请求时指定图片尺寸,可以通过URL查询参数实现:

router.get("/image/:filename", (req, res) => {
  // 从query参数获取尺寸,默认宽度300px
  const width = parseInt(req.query.width) || 300;
  // 高度可选,不传入则按比例自适应
  const height = req.query.height ? parseInt(req.query.height) : undefined;

  // ... 保留前面的文件查询、类型判断逻辑

  // 根据参数调整尺寸
  const imageProcessor = sharp().resize(width, height);

  // ... 后续流式处理逻辑不变
});

前端就可以通过/image/avatar.jpg?width=500&height=400这样的URL请求指定尺寸的图片了。

4. 更多sharp配置示例

  • 固定宽高并裁剪超出部分:
    sharp().resize(300, 300, { fit: 'cover', position: 'center' })
    
  • 调整JPEG图片质量(节省带宽):
    sharp().resize(300).jpeg({ quality: 80 })
    

内容的提问来源于stack exchange,提问作者user11720628

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 20:12:46