我正在使用jsmodeler(https://github.com/kovacsv/JSModeler)在我的网站上展示三维模型。用户选择文件的唯一选项是通过filepicker和在url中放置文件路径(即http://localhost:3000/ModelView#https://cdn.rawgit.com/kovacsv/Online3DViewer/9e9ca71d/website/testfiles/cube.3ds)。我想通过nodejs服务器发送一个文件,然后将该文件加载到查看器中。
我想我需要把我提供的文件的路径放进url并刷新页面吗?但我该如何走这条路呢?它应该只对一个用户可用,所以我不能把它放在公用文件夹中!
假设我用发送
res.sendFile(myFile)
这不会发送文件的路径,对吗?我还担心,即使我得到了路径,当我在新的url刷新页面时,文件也不会在那里了。
更新:所以我想,当模型保存在我的服务器上时,我会把它保存在公共文件夹中,但保存在一个随机数下,即"path/1982746/model.obj"。这样,就没有人可以直接在url中键入模型。这样安全吗?或者有人可以很容易地看到所有公开的文件吗?
是的,随机数将有助于混淆其他用户的文件。您可以在发布请求中使用"多部分/表单数据"将文件上传到节点服务器,并将其保存在某个位置。保存后,您可以执行类似的操作
res.redirect('http://example.com/mypage/'+generatedNumber);
在重定向的页面上,您可以形成适当的路径,并将文件加载为服务器目录中的任何其他文件。
您可以保留一个通用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.
});
希望这能有所帮助。