2017-08-02 129 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的代碼可以提供更多的幫助。