Meteor.js - 直接从MongoDB提供图像?

时间:2013-09-12 10:55:03

标签: javascript meteor

使用Meteor.js,我如何提供任意HTTP响应,例如。图像还是PDF?

示例1 - 我需要生成PDF报告,我无法将其存储在公共场所或第三方服务器上。或者,可以响应HTTP GET实时生成报告。

示例2 - 如果我有一个网址:

/images/myimage.png

我想在服务器上检测到该请求,从MongoDB中读取图像,并使用正确的标头提供它,因此它可以与img标签一起使用,即。

<img src="/images/myimage.png">

我不想将图像存储在/ public /目录中,这样我就可以更准确地控制所提供的内容及其权限。

编辑我还能够使用Iron Router获得一个基本示例。

ImageController = RouteController.extend({
    run: function() {
      var f = fs.readFileSync("/path/to/image.png");
      var res = this.response;
      res.writeHead(200, { "content-type": "image/png" });
      res.write(f);
      res.end();  
    }
});

Router.map(function() {
  Router.route("images", {
    path: "/images/image.png",
    where: "server",
    controller: ImageController // Note - cannot use string here - Iron Router has a dependency on window
  });
});

2 个答案:

答案 0 :(得分:0)

您可以使用filepicker。在filepicker中,上传图像保存在存储桶(云)中并返回该图像的URL。您可以将URL保存在mongo数据库中。当您想要使用该图像时,只需使用<img src="{{saveurl}}" >。 有关更多帮助,请参阅文档https://developers.inkfilepicker.com/docs/web/

答案 1 :(得分:0)

您可以使用中间件:

在任何节点应用中编写响应代码
WebApp.connectHandlers.stack.splice (0, 0, {
  route: '/path/to/the/file',
  handle: function(req, res, next) {

    res.writeHead(200, {
      'Content-Type': ...ITEM TYPE... ,
    });
    res.write( ...ITEM DATA... );
    res.end();

  },
});