2017-01-18 4 views
0

私はjsmodeler(https://github.com/kovacsv/JSModeler)を使用して自分のサイトに3Dモデルを表示しています。ユーザーがファイルを選択するための唯一のオプションは、filepickerと、URLにファイルへのパスを入れることです(つまり、http://localhost:3000/ModelView#https://cdn.rawgit.com/kovacsv/Online3DViewer/9e9ca71d/website/testfiles/cube.3ds)。ノードjsサーバーからファイルを送信し、そのファイルをビューアにロードします。静的ファイルを提供し、そのパスを1人のユーザーに与える方法は?

私はURLに提供しているページにファイルを書き込む必要があると思いますか?しかし、どうすればこの道を得ることができますか?私はパブリックフォルダに入れることができないので、それは1人のユーザだけが利用できるべきです!

は、私はこれは、ファイルの右へのパスを送信しません

res.sendFile(myFile) 

でそれを送って言いますか?また、パスを取得しても、新しいURLでページを更新すると、ファイルはもう存在しないと心配しています。

更新: モデルが私のサーバーに保存されているときに、パブリックフォルダに保存しますが、乱数、つまり "path/1982746/model.obj"の下に保存します。そうすれば、誰もモデルをURLに入力することはできません。これは安全ですか、誰かが公開されているすべてのファイルを簡単に見ることができますか?

+0

Passportまたはその他の認証ミドルウェアを使用していますか?ログインしているすべてのユーザーにファイルを提供しますか? – Tom

+0

@Tom私は退屈なAD証明書を使用しています。私はログインしたすべてのユーザーにファイルを提供したくないのですが、それが唯一の方法だと思います。 –

答えて

1

はい乱数は、他のユーザーからファイルを難読化するのに役立ちます。ポストリクエストで 'multipart/form-data'を使用してファイルをノードサーバーにアップロードして、ある場所に保存することができます。保存したら、あなたはリダイレクトページで

res.redirect('http://example.com/mypage/'+generatedNumber); 

ような何かを行うことができ、あなたは適切なパスを形成し、それはあなたのサーバーのディレクトリ内の他のファイルがあったように、ファイルを読み込むことができます。

+0

ありがとう、これは私が二重チェックしたいと思っていたものです。 "難読化を助ける"、とにかく "完全に難読化する"のですか? –

+0

はい、md5を使用してオブジェクト名をハッシュできます。そうすれば、32文字の英数字のハッシュを作成できます。それは、衝突なしで一意のハッシュを使って36^32のファイル名をハッシュさせます。 ファイルに対する完全なセキュリティを望む場合は、ファイルストリームを使用してノードサーバーからファイルを動的に提供することもできます。この方法で、特定のファイルにアクセスする前に特定のファイルにアクセスする権限があるかどうかを確認することもできます。この方法でファイルを処理すると、パフォーマンス上のオーバーヘッドが発生します。ユースケースに応じて電話をかけることができます。 –

+0

res.sendfileを使用すると、content-typeヘッダーとともにファイルを送信できます。これにより、ファイルストリームの実装が抽象化されます。 –

0

ファイルをダウンロードできるフォルダ名を送信するだけで、ファイルをダウンロードするための一般的なURLを保持することができます。この方法で、パブリックフォルダに保存する必要はありません。

app.all('/getModelFile', function (req, res) { 
    res.sendFile('model.obj', {root: './public/pages/models/'+req.params.id}); // Params.id is 1982746 <- the folder name you can have mulitple model files inside the models folder send the folder name as id and fetch the file. 
}); 

これが役に立ちます。

関連する問題