如何提供静态文件并将其路径提供给一个用户?

How to serve static file and give its path to one user?

我正在使用 jsmodeler (https://github.com/kovacsv/JSModeler) to show 3d models on my site. The only options for the user to select a file are through filepicker and through putting the path to the file in the url (ie http://localhost:3000/ModelView#https://cdn.rawgit.com/kovacsv/Online3DViewer/9e9ca71d/website/testfiles/cube.3ds)。我想通过我的节点 js 服务器发送一个文件,然后将该文件加载到查看器中。

我想我需要将我正在提供的文件的路径放入 url 并刷新页面?但是我如何获得这条路呢?它应该只对一个用户可用,所以我不能把它放在 public 文件夹中!

假设我用

发送
res.sendFile(myFile)

这不是发送文件的路径吗?我也担心即使我得到了路径,当我在新url刷新页面时,该文件将不再存在

更新: 所以我在想当模型保存在我的服务器上时,我会把它保存在 public 文件夹中,但是在一个随机数下,即 "path/1982746/model.obj"。这样就没有人可以直接将模型输入 url。这安全吗,或者有人可以轻松查看 public?

中的所有文件吗?

是的,随机数有助于混淆其他用户的文件。您可以在 post 请求中使用 'multipart/form-data' 将文件上传到节点服务器并将其保存在某个位置。保存后,您可以执行

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

在重定向的页面上,您可以形成适当的路径并加载该文件,就像它是您服务器目录中的任何其他文件一样。

您可以保留通用的 Url 来下载文件,只需发送文件夹名称即可下载文件,这样您就可以将文件保存在任何地方,不一定在 public 文件夹中.

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.
});

希望对您有所帮助。