【问题标题】:Express res.download() not actually downloading fileExpress res.download() 并未实际下载文件
【发布时间】:2014-11-24 21:28:02
【问题描述】:

我正在尝试通过 Express 的 res.download 函数将生成的文件返回到前端。我正在使用 chrome,但每当我调用执行以下代码的 API 时,所有返回的都是从 Express res.sendFile() 函数返回的相同值。

我知道 res.download 使用 res.sendFile,但我希望下载函数实际保存到文件系统,而不是仅在响应正文中返回文件。

这是我的代码。

exports.download = function(req,res) {
    var filePath = //somefile that I want to download
    res.download(filePath, 'response.txt', function(err) {
        throw err;
    }
}

我知道上面的代码至少部分有效,因为我在响应中返回了文件的内容。但是,我希望将其保存到文件系统中。

我是否误解了下载功能应该做什么?我是否只需要手动获取响应数据并将其写入文件系统?

【问题讨论】:

  • 你是如何发出到达调用它的端点的请求的?下载的唯一方法是通过尝试打开新页面的 Chrome 发出请求。通过 XMLHttpRequest 或类似的方式向该端点发出请求是行不通的。
  • @loganfsmyth 我不知道为什么会这样。你能解释一下吗?
  • 当您单击链接时,Chrome 会发送请求,Chrome 的默认行为是下载文件,除非它可以呈现。当您从 JS 发出请求时,您的 JS 代码就是获得响应的东西,并且可以随意使用它做任何事情,因此 Chrome 的默认行为不参与其中。

标签: node.js express


【解决方案1】:

res.download 添加标题,建议浏览器下载文件而不是打开文件。但是,没有办法强制浏览器这样做。通常情况下,是否下载特定文件最终由用户选择。

如果您使用 AJAX 触发此请求,那么这不会导致它被下载,因为您的 JavaScript 正在请求它获取数据。

我是否只需要手动获取响应数据并将其写入文件系统?

您没有浏览器端 JavaScript 中的文件系统访问权限。我不确定你打算如何做到这一点。

【讨论】:

  • 我将如何触发请求以使其被下载?几个月前,我使用此代码完成我打算做的事情没有任何问题。现在虽然它不起作用。
  • @kkyrazis 答案完全取决于请求的触发方式。阿贾克斯?弹出窗口?点击链接?
猜你喜欢
  • 1970-01-01
  • 2019-05-27
  • 2020-05-29
  • 2020-04-12
  • 1970-01-01
  • 2018-12-09
  • 2015-10-24
  • 2020-08-06
  • 2016-03-07
相关资源
最近更新 更多