Node JS:如何查看下载的图像二进制文件?

时间:2014-12-21 23:25:07

标签: node.js express amazon-s3 sails.js

我使用Sails JS(适用于任何 Node JS 框架)和第三方外部存储服务(我使用SmartFile,但它可能是S3或任何东西)。

出于安全原因,图像不公开,我需要一个API密钥才能访问它们。 此外,与客户端共享API密钥不是一个好的安全措施。

向客户展示图像的最佳做法是什么?

琐碎的解决方案:

  1. 从服务器下载二进制文件
  2. 将其保存到服务器上的文件中(如果服务器是只读的,该怎么办?)
  3. 将文件链接添加到视图,以便登录用户可以看到它
  4. 但这听起来像双重努力,服务器下载它,然后再次下载客户端。

    更好的想法?

1 个答案:

答案 0 :(得分:1)

溪流,宝贝。 Streams!

使用request的简单示例(首先是npm install request):

// api/controllers/ImageController.js

var request = require('request');

module.exports = {

  getImage: function(req, res) {

    // Determine which file to download, somehow
    var filePath = req.param('filePath');
    // Set the content header for the image
    res.header('content-type', 'image/jpeg');
    // Pipe the image from the external server to the client
    request.get("http://someExternalService.com" + filePath).pipe(res);

  }

};

所以:

  1. 获取API端点以检索文件
  2. 为正确的文件类型设置标题
  3. 从API服务器→Sails→客户端
  4. 流式传输文件

    这里没有描述如何使用外部存储服务(可能是auth标头)进行授权以及确定要设置的确切内容类型(可能通过检查文件扩展名)的详细信息,但由于问题是关于如何无需下载两次即可将图像发送到客户端,这是您需要知道的全部内容。