res.download() 在我的情况下不起作用

IT技术 javascript node.js express
2021-03-08 20:13:06

我正在使用 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');
        }
      });

但这会导致响应文件的全部内容。

我期待浏览器要求我将文件保存在本地磁盘中。

我如何将文件保存在本地磁盘中。???

2个回答

让 Express 设置正确的标题,然后执行以下操作:

res.get('/download', function(req, res) {
  res.download(__dirname + 'jsonFile.json', 'jsonFile.json');
});

(文档)

编辑:由于您/download通过 AJAX 调用进行请求,因此您必须更改设置,因为在这种情况下,大多数(所有?)浏览器都不会显示下载对话框。

相反,您可以从前端代码创建一个新窗口来触发对话框:

window.open('/download?foo=bar&xxx=yyy');
@robertklep 感谢 window.open 为我工作。但我面临一个新问题。我的服务发送一个 zip 文件作为响应。但在我的情况下,只下载了一个空的 zip 文件
2021-04-16 20:13:06
是的,我已经删除了标题,结果是一样的,但我仍然没有得到预期的结果。浏览器应该要求将文件保存在磁盘上,
2021-05-02 20:13:06
我的意思是相同的..我已经添加了他 res.get('/download' ... 行但结果是一样的.. 得到充满文件内容的响应。
2021-05-06 20:13:06
此外,如果我删除路径名中的“/”..我得到 404
2021-05-09 20:13:06
@Koka 哪个浏览器?对我来说,它在 Chrome、FF 和 Safari 中运行良好。另外,您是/download直接打开还是通过AJAX之类的东西打开
2021-05-15 20:13:06

只是为了确认@robert 所说的话,

因为这件事让我头疼了两天,而不是使用ajax调用,用你的ajax请求位置打开一个新窗口,例如:

window.open("http://yourserver.com/api/link?a=3&b=4")

希望这有助于某人。