这对我来说很难解释,但是我试图通过创建一个链接而不是50个链接来下载表单来缩短代码。我将尝试使用我的代码更好地解释这一点。
我有5个get请求,它们执行完全相同的操作,但下载了一个不同的文件。
router.get('/form1', function (req, res) {
var file = __dirname + '/../public/forms/form1.pdf';
res.download(file);
});
router.get('/form2', function (req, res) {
var file = __dirname + '/../public/forms/form2.pdf';
res.download(file);
});
etc...
和我的前端链接是;
<a href="/downloads/form1">FORM 1</a>
<a href="/downloads/form2">FORM 2</a>
etc...
我能做些什么使它更具动态性吗?我唯一能想到的就是这样。
router.get('/:formName', function (req, res) {
// some how do a "req.params.formName"
var file = __dirname + '/../public/forms/' + req.params.formName + '.pdf';
res.download(file); // Set disposition and send it.
});
但是我不知道如何获得formName,或者那是否有可能。
这里有一些其他选项可以澄清:
选项1:如果服务器上的文件夹具有相当可管理的目录结构,则只需使用express.static将物理文件夹映射到虚拟文件夹并自动下载:
app.use('/download', express.static(path.join(__dirname, '/public/forms/')))
只要该文件在服务器上您所映射的路径(即/ public / forms)中,这将导致来自前端的任何带有href ='/ download / something.pdf'的链接正常工作。
选项2(上面的David E本质上回答了该问题):在您的原始代码中,如果您想为看起来像/ download / form1,/ download / form2的链接生成路径处理程序,这是一个非常小的修改:
router.get('/download/:formNumber', function (req, res) {
var file = __dirname + '/public/forms/' + req.params.formNumber + '.pdf';
res.download(file);
});
选项3:您想要验证对文件的访问,并可能支持对单个处理程序的多种复杂URL方案,这些处理程序可以查找适当的物理路径并发送文件:
router.get('/download/:path[forms|images|files]/:formNumber1', fileRequestHandler);
router.get('/public/downloadFolder2/:formNumber2', fileRequestHandler);
router.get('/public/downloadFolder3/:formNumber3', fileRequestHandler);
function fileRequestHandler(req, res) {
// Check authentication here - example below from Passport
if(!req.isAuthenticated())
return res.status(401).send({err: 'Unauthorized'});
// Check which form number is supplied and map to appropriate physical file
if(req.params.formNumber1) {
// in this example, req.params.path can be one of three allowed sample values - forms or images or files
var file = __dirname + '/public/' + req.params.path + '/' + req.params.formNumber + '.pdf';
res.download(file);
} else if(req.params.formNumber2) {
// etc.
}
}
注意:Ezra Chang关于路径有效性的观点很重要。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句