使用Apache这很容易,但是使用Node.JS我不这么认为。简单地说,我希望当用户点击这样的内容时:<a href="/dir/file.png">
,他开始下载文件。当我这样做时,我被重定向到http://foo.com/fir/file.png
,我可视化照片。还要说我在应用程序中配置了此app.use(express.static(__dirname + '/public'));
,因此,该文件位于公共路径中,并且公共路径被声明为静态路径。并且,当用户点击时,我不希望他被重定向,然后开始下载。
我知道这是可行的,只需单击一个链接即可开始下载!但我不知道该怎么做。
谢谢你的进步!
编辑:
下载的<a href="">
HTML在这里:
app.get('/:user/:id', function (req, res){
usermodel.findOne({ user: req.params.user }, function (err, user){
var imagen = user.imagen.id(req.params.id);
if (err) throw err;
res.render('photo.ejs', {
user: user,
photo: imagen,
});
});
});
是否需要创建新的app.get
?如果我这样做,我会被重定向?我试图在没有重定向的情况下这样做。
答案 0 :(得分:4)
这取决于您使用图片发送的标头。
要使浏览器下载图像而不是显示图像,您需要设置"Content-Disposition: attachment"
标题。
由于您使用的是static
中间件,因此这比您自己的请求处理函数要简单一些。你必须在静态之前注入一个中间件。
app.use(function(req, res, next) {
if (req.path.split('/')[0] === "downloads")
res.attachment(); //short for res.set('Content-Disposition', 'attachment')
next();
});
app.use(express.static(__dirname + '/public'));
答案 1 :(得分:0)
与@ rdrey的答案类似,如果网址中有?dl
个查询参数,请让浏览器下载文件。
app.use('/gifs/*.gif', function(req, res, next) {
if (req.query.dl !== undefined) res.attachment();
next();
});
app.use('/gifs', express.static(__dirname + '/gifs'));