临时文件下载

时间:2013-03-21 05:08:54

标签: node.js meteor filepicker.io

是否有基本创建一次性文件下载的服务,最好能从NodeJS中使用?

我已经对FilePicker进行了一些研究,并且没有找到任何关于重新生成它为文件提供的链接的信息。可能有一种方法可以用NodeJS做到这一点,但我同时使用Meteor 这么多Node可能会发生冲突。

4 个答案:

答案 0 :(得分:1)

你可以用流星建造它。将meteor-routermeteorite&同时使用使用服务器端路由来传递文件。

您需要一个集合来跟踪下载的文件:

服务器JS

var downloads = new Meteor.Collection("downloads");

//create a link
downloads.insert({url:"/mydownload.zip",downloaded:false})

Meteor.Router.add('/file/:id', 'GET', function(id) {
    download = downloads.findOne(id);
    if( download) {
       if(dowload.downloaded) {
           this.response.send("You've already downloaded me")
       }
       else
       {
           //I guess you could just redirect or stream the file for an extra layer of surety
           this.response.redirect(download.url);
       }
   }
});

在客户端上,您可以将/files/{{_id}}与该文件的_id结合使用,将该人员作为链接下载

答案 1 :(得分:0)

我的建议也是添加自定义服务器端逻辑来计算上传次数(或者只是将文件标记为已下载/未下载)并做出相应的响应。您与Filepicker.io最接近的方法是使用安全策略来限制将文件下载到特定的时间间隔。

答案 2 :(得分:0)

使用Heroku Cloud和NodeJS Meteor Hooks的解决方案

Heroku特别适用于临时文件下载链接:它们提供了一个“临时暂存器”文件系统,每次程序重启时都会重置,并且每个正在运行的节点服务器都看不到其他实例创建的文件。

  

每个dyno都有自己的短暂文件系统,并带有新的副本   最近部署的代码。在dyno的一生中它的运行   进程可以使用文件系统作为临时暂存器,但没有   写入的文件对任何其他dyno和中的进程可见   写入的任何文件将在dyno停止时丢弃   重新启动。

取自Heroku文档:https://devcenter.heroku.com/articles/dynos#ephemeral-filesystem

因此,写入“文件系统”的任何文件都是临时的。

这样就可以很容易地解决这个问题:你可以简单地使用NodeJS文件系统操作在服务器上创建临时文件,为它们提供一次(或在有限的时间内),然后将它们删除,这样它们就无法再次下载

这与$.download()之类的内容相结合,可以提供无缝体验,从而防止未经授权的下载。

示例代码

答案 3 :(得分:0)

除了使用router

之外

在Meteor.startup中你可以添加

var require = __meteor_bootstrap__.require;
fs = require( 'fs' );

fs变量应仅在服务器上声明。 fs包由Meteor使用,不需要单独添加。

完成此操作后,您可以创建名称为Meteor.uuid()的文件,这使得它们非常独特且难以猜测。也可以使用Meteor.setTimeout

在一定时间后删除文件

问题是:要下载的文件来自哪里?