是否有基本创建一次性文件下载的服务,最好能从NodeJS中使用?
我已经对FilePicker进行了一些研究,并且没有找到任何关于重新生成它为文件提供的链接的信息。可能有一种方法可以用NodeJS做到这一点,但我同时使用Meteor 这么多Node可能会发生冲突。
答案 0 :(得分:1)
你可以用流星建造它。将meteor-router与meteorite&同时使用使用服务器端路由来传递文件。
您需要一个集合来跟踪下载的文件:
服务器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
问题是:要下载的文件来自哪里?