【问题标题】:unable to resize images using sharp无法使用锐化调整图像大小
【发布时间】:2018-09-11 16:47:25
【问题描述】:

我正在使用 multer 将图像上传到服务器。我正在使用Sharp调整图像大小,然后发送给客户端。但是,一旦用户上传图像,multer 将其上传到服务器并调整大小,即使同一用户再次上传,multer 也会上传新文件,但Sharp 不会调整新上传图像的大小,而是发送原始调整大小的图像。

app.post('/upload',(req,res)=>{
    upload(req,res,(err)=>{
        if(err){
            res.render('picupload',{
                msg: err
            });
        }else{
           if(req.file == undefined){
               res.render('picupload',{
                   msg: 'Error: No File selected!'
               });
           } else{
            console.log(req.file);
            sharp(`./public/uploads/${req.file.filename}`)
                .resize(40,40)
                .toFile(`./public/uploads/resize/${req.file.filename}`,(err,info)=>{
                    if(err) throw err;
                    console.log(info);
                });

            res.render(pathjoin13,{
                file: `uploads/${req.file.filename}` ,
                file1: `uploads/resize/${req.file.filename}`
            });
           }
        }
    });
});

【问题讨论】:

    标签: node.js multer sharp


    【解决方案1】:

    res.render() 调用取决于异步 toFile() 调用的输出,因此需要转到其回调,例如:

    .toFile(`./public/uploads/resize/${req.file.filename}`,(err,info)=>{
      if (err) throw err;
      console.log(info);
    
      res.render(pathjoin13,{
        file: `uploads/${req.file.filename}` ,
        file1: `uploads/resize/${req.file.filename}`
      });
    });
    

    【讨论】:

    • 会有什么不同吗?如果是这种情况,那么当用户上传图片时,它根本不应该在第一种情况下调整它的大小,因为在它调整大小时 res.render 函数由于异步 .toFile 方法而被调用。但是当一个新用户上传一张图片时,它会调整它的大小,然后我将调整后的图片发送给客户端,但是当同一个用户再次上传一张新图片时,sharp 不会调整它的大小,而是渲染旧的调整大小的图片。
    猜你喜欢
    • 2021-10-07
    • 1970-01-01
    • 2014-09-21
    • 2015-06-08
    • 2020-03-03
    • 2013-08-21
    • 1970-01-01
    • 2018-06-07
    • 2021-11-09
    相关资源
    最近更新 更多