4

使用 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
  });
});
4

2 回答 2

0

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

于 2013-09-12T11:24:24.810 回答
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();

  },
});
于 2013-09-12T11:56:21.750 回答