res.download() 在我的情况下不起作用
Posted
技术标签:
【中文标题】res.download() 在我的情况下不起作用【英文标题】:res.download() not working in my case 【发布时间】:2013-12-09 05:30:16 【问题描述】:我正在使用 nodejs 和 expressjs 框架从服务器下载文件 'jsonFile.json'。
我正在使用以下代码
res.get('/download', function(req, res)
res.setHeader('Content-disposition', 'attachment; filename=jsonFile.json');
res.setHeader('Content-Type', 'text/json');
res.download(__dirname + 'jsonFile.json');
);
但这会导致响应包含文件的全部内容。
我期待浏览器要求我将文件保存在本地磁盘中。
我如何将文件保存在本地磁盘中。???
【问题讨论】:
【参考方案1】:让 Express 设置正确的标题,然后这样做:
res.get('/download', function(req, res)
res.download(__dirname + 'jsonFile.json', 'jsonFile.json');
);
(doc)
编辑:由于您通过 AJAX 调用请求 /download
,因此您必须更改设置,因为大多数(所有?)浏览器在这种情况下都不会显示下载对话框。
相反,您可以从前端代码创建一个新窗口来触发对话框:
window.open('/download?foo=bar&xxx=yyy');
【讨论】:
如果我删除路径名中的“/”..我得到 404 是的,我已经删除了标题,结果是一样的,但我仍然没有得到预期的结果。浏览器应该要求将文件保存在磁盘上, @Koka 哪个浏览器?它适用于我的 Chrome、FF 和 Safari。另外,你是直接打开/download
,还是通过AJAX之类的?
我的意思是一样的..我已经添加了他 res.get('/download' ... 行但结果是一样的..得到充满文件内容的响应。
@robertklep 感谢 window.open 为我工作。但我面临一个新问题。我的服务发送一个 zip 文件作为响应。但在我的情况下,只下载了一个空的 zip 文件【参考方案2】:
只是为了确认@robert 所说的,
因为这件事让我头晕了两天, 不要使用 ajax 调用,而是使用您的 ajax 请求位置打开一个新窗口,例如:
window.open("http://yourserver.com/api/link?a=3&b=4")
希望这对某人有所帮助。
【讨论】:
以上是关于res.download() 在我的情况下不起作用的主要内容,如果未能解决你的问题,请参考以下文章