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

res.download() not working in my case

本文关键字:我的 情况下 不起作用 download res      更新时间:2023-09-26

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

但这会导致一个包含文件全部内容的响应。

我希望浏览器会要求我将文件保存在本地磁盘中。

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

让Express设置正确的标头并执行以下操作:

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

(doc)

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

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

window.open('/download?foo=bar&xxx=yyy');

只是为了确认@robert说了什么,

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

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

希望这能帮助到别人。