2017-08-02 85 views
1

OVERVIEW:我正在使用Amazon S3让用户上传图片。我一直在编辑路线,以便用户可以在上载图片后编辑图片。我正在通过PUT路由来完成此操作。这是我目前的解决方案。它可以覆盖当前的图像。Amazon S3 - 编辑上传的图片

问题:如果用户选择零新图像,它会用空白文件路径覆盖旧图像。也就是编辑后没有图像显示。如果用户只尝试编辑一个图像,则会发生同样的情况,即一个图像将更新,但其他图像将被空白文件路径覆盖,因此不会显示图像。

问题:让用户使用Amazon S3和Multer-S3编辑图像的正确方法是什么?

感谢您的帮助! :)

app.put("/:id", function(req, res){ 

      upload(req,res,function(err) { 
      if(err) { 
      console.log(err); 
      res.redirect('/') 
      } 

      var filepath = undefined; 

      var filepath2 = undefined; 

      var filepath3 = undefined; 

     if(req.files[0]) { 
      filepath = req.files[0].key; 
     } 

      if(req.files[1]) { 
      filepath2 = req.files[1].key; 
     } 

     if(req.files[2]) { 
      filepath3 = req.files[2].key; 
     } 


     var image = filepath; 
     var image2 = filepath2; 
     var image3 = filepath3; 


     var newData = {image: image, image2: image2, image3: image3} 
     Rental.findByIdAndUpdate(req.params.id, {$set: newData}, 
     function(err, rentals){ 

      if(err){ 
       req.flash("error", err.message); 
       res.redirect("back"); 
      } else { 

       req.flash("success","Successfully Updated!"); 
       res.redirect("/rentals/" + rental._id); 

      } 
    }); 
    }); 
    }); 
    }); 

回答

0

您应该在调用下游更新之前验证用户输入。

如果值没有正确填充(因为没有更新),您不应该调用Rental.findByIdAndUpdate

我看不到Rental的代码可以提供更多的帮助。