【问题标题】:Force download is not working强制下载不起作用
【发布时间】:2013-04-03 23:09:43
【问题描述】:

我想在用户单击链接而不是在浏览器中打开链接时提示他们下载。

使用 expressJS,应该是这样的:

app.get('/download', function (req, res) {
  res.download('public/uploads/sample.pdf');
});

我怎样才能用 GeddyJS 做到这一点?

我试过这段代码,但它仍然在浏览器中打开它,这意味着“resp.setHeader”不起作用。

this.download = function (req, resp, params) {
  var filename = 'sample.pdf';
  var file = 'public/uploads/sample.pdf';

  resp.setHeader('Content-Disposition', 'attachment; filename="' + filename + '"');
  resp.sendFile(file);
};

我错过了什么吗?

非常感谢。

【问题讨论】:

  • 尝试设置 Content-Type 和 Content-Disposition。

标签: javascript node.js download geddy


【解决方案1】:

问题是 Geddy 的响应对象没有 'setHeader' 方法,因此您需要进入并在真正的 Node 响应对象上设置标头。

resp.resp.setHeader('Content-Disposition', 'attachment; filename="' + filename + '"');

【讨论】:

  • 仍然无法正常工作,因为响应标头始终为:“ Connection:keep-alive Content-Type:image/png Date:Fri, 05 Apr 2013 10:59:14 GMT Transfer-Encoding:chunked” ,无论我用 resp.setHeader() 放置什么字符串。 resp.sendFile() 是否有可能推翻 setHeader?如果是,那么如何设置标题?
  • @fin 只是为了确认一下,您的示例是否使用不同的文件?你说image/png,但你的问题是关于 PDF 的。我想我知道它为什么不起作用,但我只想先确认一下。
  • 对不起,我的意思是“连接:保持活动内容类型:应用程序/pdf 日期:2013 年 4 月 5 日星期五 10:59:14 GMT 传输编码:chunked”。我也在尝试下载图像,但仍然无法正常工作。
  • @fin 更新,让我知道它是如何工作的。 Geddy 用 mixins 做了一些奇怪的事情,所以外部的 resp 有一个 setHeader 函数,但我认为它实际上并没有做任何事情。
  • nice.. 工作.. 不知道resp 也有resp.. thx man...至少它在这个版本中是固定的。
猜你喜欢
  • 2012-08-04
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
相关资源
最近更新 更多