0

目前,我从我的云存储存储桶中下载图像,使用base64对其进行编码,然后在src标记的src属性中将数据传递给数据URI。如何在浏览器中显示从云存储下载的图像?

有没有其他方法可以做到这一点?

router.post('/images', function(req, res, next) { 
    var image = bucket.file(req.body.image); 
    image.download(function(err, contents) { 
     if (err) { 
      console.log(err); 
     } else { 
      var resultImage = base64_encode(contents); 
      var index = req.body.index; 
      var returnObject = { 
       image: resultImage, 
       index: index 
      } 
      res.send(returnObject); 
     } 
    }); 
}); 

回答

1

图像是否公开可读?如果是这样,你可以只使用

<img src="http://<bucket>.storage.googleapis.com/<object>"> 

否则,你将需要生成一个GET操作,这可以在图像标签中使用的signed URL

+0

不幸的是,这些是我不想用于安全原因的2个选项。任何人都可以击中这些网址,让我的后端弯曲膝盖。 – TheProgrammer

+0

您能否澄清您对签名网址的担忧?在服务器端生成签名的URL会产生成本,但除非您需要每秒生成数千个URL,否则即使是非常小的机器也应该可以管理它。 –

+0

@BrandonYarbrough这是关于安全。任何人都可以从我的网站上合法地获得一个签名的网址,然后用bot或僵尸网络数百万次开始点击该网址。然后在当前帐户到期时获得另一个签名的URL,等等。这就是我目前从我的服务器上的存储桶中下载图像的原因。除我的服务器外,没有人可以访问我的存储桶。唯一的问题是,加载64位编码图像有点慢,所以我想知道是否还有其他更好的解决方案也是安全的。 – TheProgrammer

相关问题