【问题标题】:Angular cannot get file download from express using res.downloadAngular 无法使用 res.download 从 express 获取文件下载
【发布时间】:2019-05-27 15:38:06
【问题描述】:

在我的应用程序中,我在后端创建了一个文件,然后我希望通过浏览器下载将其传递给用户。我试过很多次

这里是快递后台:

app.get('/download', (req, res) => {
  res.download('filename.txt', function (err) {
    console.log(err);
  });
})

控制台调用没有返回,所以大概没有错误。这是我在前端所做的,遵循here 的建议和这里:

window.open('localhost:3000/download');

结果是我弹出一个空白窗口,但没有下载。我也试过this:

const filePath = 'localhost:3000/download/';
const link = document.createElement('a');
link.href = filePath;
link.download = filePath.substr(filePath.lastIndexOf('/') + 1);
link.click();

但在这种情况下,什么都不会发生。

我做错了什么?我什至不知如何进一步调试。

更新 1

感谢@jal_a,我取得了进展。我现在意识到,如果我手动创建一个窗口并输入 url(如建议的那样),下载就可以了。但是,当使用 url 相同的 window.open(url) 从应用程序启动窗口时,窗口会打开,但不会启动下载。如果我然后转到创建的窗口,请单击 url 并按回车键...瞧!有用!如何从应用程序启动窗口启动下载?

更新 2

谢谢@IceMetalPunk,我试过了,我在控制台中收到以下错误 - 我尝试下载的文件是 gpx 格式的 gps 数据 - 我可以在响应中看到,但它似乎是期待 JSON??我需要做任何预处理来发送文件吗?:

HttpErrorResponse {headers: HttpHeaders, status: 200, statusText: "OK", 
url: "http://localhost:3000/download/", ok: false, …}
error:
error: SyntaxError: Unexpected token < in JSON at position 0 at JSON.parse 

...

text: "<?xml version="1.0" encoding="UTF-8"?>
↵<gpx version="1.1" xmlns="http://www.topografix.com/GPX/1/0">
↵   <rte>
↵      <name>undefined</name>
↵      <rtept lat="50.70373" lon="-3.07241" />
↵      <rtept lat="50.70348" lon="-3.07237" />
↵   </rte>
↵</gpx>"
__proto__: Object
headers: HttpHeaders {normalizedNames: Map(0), lazyUpdate: null, lazyInit: 
ƒ}
message: "Http failure during parsing for http://localhost:3000/download/"
name: "HttpErrorResponse"
ok: false
status: 200
statusText: "OK"
url: "http://localhost:3000/download/"
__proto__: HttpResponseBase

【问题讨论】:

  • 只需在浏览器中转到localhost:3000/download 看看是否下载。如果不是,那么问题出在您的后端。在浏览器的开发者工具中检查网络请求,以更深入地了解您得到的响应。
  • 我不是 100% 确定这一点,但我相信如果您使用 Content-Disposition 标头(这是 Express 在您使用 res.download 时发送的内容),您不需要打开一个弹出窗口。您可以直接导航到下载页面,浏览器不会离开当前页面,而是要求用户保存下载。

标签: javascript node.js express


【解决方案1】:

问题是我的下载链接不包含 url 的 http:// 元素,正如 this answer 所描述的那样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-29
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 2018-05-30
    • 2019-08-26
    • 1970-01-01
    相关资源
    最近更新 更多