【问题标题】:Getting the entire file path in route获取路径中的整个文件路径
【发布时间】:2020-02-20 23:15:11
【问题描述】:

我正在构建一条从我们的服务器下载文件的路径。问题是文件路径包含正斜杠,然后 filePath 变量只包含第一个文件夹。

注意:不用担心 - 代码通过检查第一个文件夹以确保路径从下载目录开始,将文件路径锁定到特定文件夹。

我尝试使用与普通斜杠不同的分隔符,例如 +。如果我这样做,代码确实有效,但这是一个非常糟糕的黑客行为。有没有其他方法可以做到这一点?

换句话说,这是可行的:

http://localhost:5000/files/C/temp+uploads+upload_c64bc04e02

但这不起作用:

http://localhost:5000/files/C/temp/uploads/upload_c64bc04e02

我真的觉得我应该想办法让它发挥作用。


router.get('/files/:bucketCode/:filePath', auth.check, async (req, res) => {

    let bucketCode= req.params.bucketCode;
    let filePath = req.params.filePath;

【问题讨论】:

  • splat 正是我想要的。不幸的是,它对我不起作用。 router.get('/files/:bucketCode/:filePath*', auth.check, async (req, res) => { let filePath= req.params.filePath; console.log('filePath:', filePath);当我访问时:localhost:5000/files/C/temp/uploads/upload_1e24aa56 服务器控制台读取:filePath: C:\dh3\temp
  • 如果我的路由定义是'/files/:bucketCode/*',如何获取路径的值?我一直在寻找这个答案 30 分钟。我一定是搜索错了。

标签: node.js express


【解决方案1】:

我发布这个答案是因为找出如何在路由定义中指定和引用通配符比它需要的更困难。

这是为我做的:

...

router.get('/files/*', auth.check, async (req, res) => {

    let file_path = req.originalUrl.replace(req.baseUrl, '');
    let file_name = file_path.substring((file_path.lastIndexOf('/') + 1));

...

值得注意的是,这并非适用于所有情况。我的用例有限,例如,我知道我从不从根目录请求文件,并且路径中总会有一个文件和至少一个文件夹。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2018-08-13
    • 2011-11-16
    • 2011-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多