Nodejs:如何为要下载的文件设置虚假路径

时间:2017-09-08 00:57:09

标签: node.js express

在我的nodejs app中,我有一个静态路径“/ public”,其结构如下:

-public
    -images
    -js
    -posts
        -2017
            -07
            -08
            -09

如您所见,我每年和每月都会创建一个文件夹来存储文件。

现在,当我从视图中链接文件时,我可以看到路径 /posts/2017/09/file.txt ,我不想显示这个

有没有办法设置假路径(可能有params)以隐藏我的文件夹结构?

1 个答案:

答案 0 :(得分:3)

对于像/files?date=2017-09这样的网址,您可以执行以下操作:

const path = require('path');

// handle routes like this: /files?date=2017-09
app.get('/files', function(req, res) {
    let date = req.query.date;
    // if no date or if it contains illegal characters, then disallow it
    // this is important to prevent injection of weird paths and ../../ stuff
    if (!date || /[^\d-]/.test(date)) {
        return res.status(404).end();
    }
    // I'm not sure what your root path is here, so replace /public with 
    // whatever that is supposed to be
    let file = path.join('/public/posts', date.replace("-", path.sep));
    res.sendFile(file, {dotfiles: "deny"}, function(err) {
        if (err) {
            res.status(404).end();
        }
    });        
});