Meteorに、クライアントに送信されない.zipを配置できるフォルダーはありますか?
二次的な質問:アプリに一時的なダウンロードリンクを作成するにはどうすればよいですか?一定期間後に自己破壊しますか?
サーバーだけがこのファイルにアクセスできるという考え方です。/server
コードではないファイルをそこに配置すると、最終的なバンドルに含まれないため、機能しないようです。
Meteorに、クライアントに送信されない.zipを配置できるフォルダーはありますか?
二次的な質問:アプリに一時的なダウンロードリンクを作成するにはどうすればよいですか?一定期間後に自己破壊しますか?
サーバーだけがこのファイルにアクセスできるという考え方です。/server
コードではないファイルをそこに配置すると、最終的なバンドルに含まれないため、機能しないようです。
これはおそらくこの問題の最善の解決策ではありませんが、クライアントに表示されないファイルをアプリにバンドルする必要がある他の人にとっては、これが私がそれを行った方法です。
Herokuは再起動時にファイルシステムの変更を保持しないため、セキュアファイルの削除が行われることに注意してください。
/public
ます。/static
これらは、バンドルで指定されたフォルダーにコンパイルされます。Herokuビルドパックを使用している場合、サーバーの作業ディレクトリへの実際のパスはです/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
たぶん私はこのためのパッケージを作ります。そのようなものを使用できるかどうか教えてください。