如何在meteor.js中处理有条件的文件下载

4
在php中,你可以使用header来强制下载文件,并隐藏实际文件位置等。这在你只想让特定的用户在特定条件下下载某些文件时非常有用。
在meteor中,我该怎么做呢?我已经试过Node.js fs模块,并成功在客户端检索了文件的二进制版本。但是如何将其转换为实际需要下载的文件呢?
谢谢!
1个回答

7
三个简单步骤:
  1. use meteorite
  2. add the iron-router package: mrt add iron-router
  3. create a server method to serve your file. Here is how an exemple:

    Router.map(function () {
      this.route('get-image', {
         where: 'server',
         path: '/img',
         action: function () {
            console.log('retrieving ' + this.request.query.name);
            this.response.writeHead(200, {'Content-type': 'image/png'}, this.request.query.name);
            this.response.end(fs.readFileSync(uploadPath + this.request.query.name));
        }
      });
    });
    
在这个例子中,请求是一个 HTTP GET,带有一个参数 name=name-of-pdf.pdf
就是这样。希望这正是你所需要的。

明天我会试一下(这里已经是00:25了),虽然完全有道理!之前不知道你可以这样使用路由器。谢谢! - Kristoffer K
刚刚编辑了答案,使用了iron-router,但我不知道为什么代码没有显示为代码。如果有人能够编辑并解释一下,那将非常有帮助。 - Micha Roon
这个程序是如何实现条件部分的?似乎任何拥有链接或能够猜测链接的人都可以下载它。 - tiagosilva
检查用户是否已登录非常容易:Meteor.userId()提供此信息。或者,您可以添加一个带有预先生成的令牌的第二个参数。这将允许一次性下载。无论如何,该示例是一个起点。您仍然需要进行一些思考。 - Micha Roon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接