我可以使用 multer 来调整图像大小并在一次操作中保存到磁盘吗?

Posted

技术标签:

【中文标题】我可以使用 multer 来调整图像大小并在一次操作中保存到磁盘吗?【英文标题】:Can I use sharp with multer to resize an image and save to disk in a single operation? 【发布时间】:2019-05-12 01:24:09 【问题描述】:

我在理解sharp 和multer 之间的关系时遇到了一些麻烦。

目前我正在使用 multer 从 req 中提取图像并将其保存到磁盘。效果很好:

const upload = Multer(
  dest: './companyImages',
  fileFilter,
  limits: 
    fileSize: MAX_SIZE
  
)

router
  .route('/images')
  .post(passportJWT, upload.array('files'), ImageUploadController.saveImage) 

我可以看到如何使用 sharp 从磁盘或流中读取文件并调整其大小,将其作为第二个文件保存到磁盘。然后我会使用 fs.unlink 删除第一个文件。

sharp('./companyImages/0d928a1a10f462f33b8fed1ea1a20eec.png')
  .resize(300, 200)
  .toFile('output.jpg', function(err) 
    // output.jpg is a 300 pixels wide and 200 pixels high image
    // containing a scaled and cropped version of input.jpg
  );

我宁愿将输出从 multer 传递到sharp,然后用sharp 进入磁盘。

问题 - 我还没有确定如何将 multer 的输出定向到磁盘上的目标以外的任何地方。我正在寻找想法和示例,并在此先感谢!

【问题讨论】:

嗨,你解决了吗?我非常坚持这一点。我不知道如何在文件分辨率降低的情况下发送到 multer 中的 dest 我也有同样的问题,你解决了吗? 【参考方案1】:

multer 有一个插件可以在 here 中为您完成,但不要使用 sharp 调整大小。这是一个例子

const multer = require('multer');
const MulterResizer = require('multer-resizer');
const resizer = new MulterResizer(
    multer: multer(storage: multer.diskStorage(destination: './')),
    tasks: [
        
            resize: 
                width: 1920,
                height: 1080,
                suffix: 'resized-big'
            
        ,
        
            resize: 
                width: 100,
                height: 100,
                suffix: 'resized-small'
            
        ,
        
            cover: 
                width: 160,
                height: 112,
                suffix: 'thumbnail'
            
        
    ]
);

router.post('/', auth.ensureAuthentication, resizer.single('file'), function(req, res, next) 
    // All multer-resizer tasks were completed
);

【讨论】:

更新:我正在处理您提出的答案。不幸的是,multer-resizer 模块安装并不顺利...

以上是关于我可以使用 multer 来调整图像大小并在一次操作中保存到磁盘吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在nodejs中使用sharp调整图像大小然后使用multer上传

具有清晰上传和调整大小的 Multer-S3

使用 multer 将多个图像上传到 AWS S3

图像 <a> 垂直和水平对齐中心并在两者中都使用 % 调整大小

第一次调整大小时无法裁剪图像

单击过滤器选项时,帖子/图像重叠,并在窗口调整大小后显示在砖石视图中