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

cod*_*ode 9 javascript node.js express

我正在使用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');
        }
      });
Run Code Online (Sandbox Code Playgroud)

但这导致对整个文件内容的响应.

我希望浏览器让我将文件保存在本地磁盘中.

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

rob*_*lep 27

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

res.get('/download', function(req, res) {
  res.download(__dirname + 'jsonFile.json', 'jsonFile.json');
});
Run Code Online (Sandbox Code Playgroud)

(doc)

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

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

window.open('/download?foo=bar&xxx=yyy');
Run Code Online (Sandbox Code Playgroud)


Moo*_*way 7

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

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

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

希望这有助于某人。

  • 2022 年更新:仍然很好用。哇,太感谢了,我这几天一直在想这个问题。 (2认同)