Filesystems Meteor服务器专用文件和临时下载

Filesystems Meteor服务器专用文件和临时下载,filesystems,meteor,Filesystems,Meteor,在Meteor中,是否有任何文件夹可以放置一个不会发送到客户端的.zip? 第二个问题:如何在应用程序上创建临时下载链接,这些链接在一段时间后会自毁? 其思想是,只有服务器才能访问此文件/server似乎不起作用,因为我放在其中的任何非代码文件都不包括在最终捆绑包中 我的解决方案-Heroku文件系统 这可能不是这个问题的最佳解决方案——但是,对于需要将客户端看不到的文件与应用捆绑在一起的任何其他人,我是这样做的 请注意,删除安全文件是因为Heroku不会在重新启动时保留文件系统更改 将文件放

在Meteor中,是否有任何文件夹可以放置一个不会发送到客户端的.zip?

第二个问题:如何在应用程序上创建临时下载链接,这些链接在一段时间后会自毁?

其思想是,只有服务器才能访问此文件<代码>/server似乎不起作用,因为我放在其中的任何非代码文件都不包括在最终捆绑包中

我的解决方案-Heroku文件系统 这可能不是这个问题的最佳解决方案——但是,对于需要将客户端看不到的文件与应用捆绑在一起的任何其他人,我是这样做的

请注意,删除安全文件是因为Heroku不会在重新启动时保留文件系统更改

  • 将文件放在
    /public
    文件夹中名为“securefiles”或类似文件夹中
  • 这些文件被编译到包中名为
    /static
    的文件夹中。请注意,如果您使用的是Heroku buildpack,则服务器工作目录的实际路径是
    /app/.meteor/Heroku_build/app/
  • 接下来,在服务器启动时,检测应用程序是否捆绑。您可以通过检查是否存在
    static
    文件夹来实现这一点,并且可能还有其他文件是bundle独有的
  • 如果您已绑定,请使用
    ncp
    将文件复制到公共位置。我制作了一个meteorite软件包就是为了这个目的,使用
    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

也许我会为这个做一个包裹。如果你能用这样的东西,请告诉我。

我没有试过,但是试一下。。(任何以“.”开头的东西,当然除了meteor)你可以将它添加到应用程序上方的文件夹中。。/。然后在服务器端使用“fs”读取。我想当你出版的时候它还没有被捆绑。也许这是一个缺失的功能。@Vindberg问题是我使用的是Heroku的文件系统,它只有临时写入功能-当dyno重新启动或复制到一定规模时,您所更改的内容将被还原。@Akshat检查我刚才给出的答案posted@Vindberg请检查我刚刚发布的答案