在 Meteor 中,是否有可以放置不会发送给客户端的 .zip 的文件夹?
第二个问题:如何在应用程序上制作临时下载链接,一段时间后会自毁?
这个想法是只有服务器才能访问这个文件。/server
似乎不起作用,因为我放置在那里的任何不是代码的文件都不包含在最终包中。
在 Meteor 中,是否有可以放置不会发送给客户端的 .zip 的文件夹?
第二个问题:如何在应用程序上制作临时下载链接,一段时间后会自毁?
这个想法是只有服务器才能访问这个文件。/server
似乎不起作用,因为我放置在那里的任何不是代码的文件都不包含在最终包中。
这可能不是解决此问题的最佳方法 - 但是,对于需要将文件与应用程序捆绑在一起而客户端无法看到的其他任何人,这就是我的做法。
请注意,删除安全文件已完成,因为 Heroku 不会在重新启动时保留文件系统更改。
/public
文件夹中。/static
包中命名的文件夹中。请注意,如果您使用的是 Heroku buildpack,则服务器工作目录的实际路径是/app/.meteor/heroku_build/app/
.static
文件夹的存在来做到这一点,并且可能还有其他文件是捆绑包独有的。ncp
. 我为此目的制作了一个陨石包,用于mrt add ncp
将节点复制工具添加到您的项目中。我建议复制到应用程序的根目录,因为这对客户端不可见。static
.此时,您拥有只能由服务器访问的文件。这是一些示例咖啡脚本来做到这一点:
Meteor.startup ->
fs = __meteor_bootstrap__.require 'fs'
bundled = fs.existsSync '/app' #Checking /app because on heroku app is stored in root / app
rootDir = if bundled then "/app/.meteor/heroku_build/app/" else "" #Not sure how to get the path to the root directory on a local build, this is a bug
if fs.existsSync rootDir+"securefiles"
rmDir rootDir+"securefiles"
#Do the same with any other temporary folders you want to get rid of on startup
#now copy out the secure files
ncp rootDor+'static/securefiles', rootDir+'securefiles', ()->
rmdir rootDir+'static/securefiles' if bundled
请注意,此代码依赖于random
包和我的包ncp
正如我在我的项目中所做的那样,添加到这个系统以支持临时文件下载非常容易。以下是如何运行url = setupDownload("somefile.rar", 30)
以创建临时文件下载链接。
setupDownload = (dlname, timeout) ->
if !timeout?
timeout = 30
file = rootDir+'securefiles/'+dlname
return '' if !fs.existsSync file
dlFolder = rootDir+'static/dls'
fs.mkdirSync dlFolder if !fs.existsSync dlFolder
dlName = Random.id()+'.rar' #Possible improvement: detect file extension
dlPath = dlFolder+'/'+dlName
ncp file, dlPath, () ->
Fiber(()->
Meteor.setTimeout(() ->
fs.unlink dlPath
, 1000*timeout)
).run()
"/dls/"+dlName
也许我会为此做一个包。让我知道你是否可以使用类似的东西。