【问题标题】:res.download() not working in my caseres.download() 在我的情况下不起作用
【发布时间】: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');
        }
      });

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

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

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

【问题讨论】:

    标签: javascript node.js express


    【解决方案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")
    

    希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-30
      • 2021-06-04
      相关资源
      最近更新 更多