【问题标题】:How can I use download a .zip file from a URL to the user in Angular 4?如何使用从 URL 下载 .zip 文件给 Angular 4 中的用户?
【发布时间】:2017-10-17 14:38:36
【问题描述】:

我有大约 10 个 .csv 和 10 个 .xlsx 销售项目文件,每个文件每天都被压缩并部署在我根据用户想要下载的文件发出的 API 获取请求指定的 URL 上。

所以基本上,当我调用 API 时,我会返回一个目标 URL 字符串,而且它很热,所以如果您导航到该 URL,文件会为用户下载,但这就是我的做法,我想知道是否有更好的方法或 Angular 方法?

这是当用户更改他们想要的文件的单选按钮时,我从 API 获取请求中获取 URL 的响应:

{
    "fileUrl": "https://example.com.csv.zip"
}

然后我使用@ngrx store 将该目标网址设置为状态。这里就不多说了……

这是用户点击下载按钮时调用的方法:

downloadCSV() {
    const url = this.state.destinationUrl;
    this.http.get(url).subscribe(res => {

        // Don't like modifying the DOM just to download a file :(
        const link = document.createElement('a');
        link.download = this.state.destinationUrl;
        link.href = this.state.destinationUrl;
        document.body.appendChild(link);

        // Don't like forcing an event :(
        link.click();

    }, (error) => {
        console.log('error fetching file download');
    });
}

问题是,这看起来很老套,我正在寻找更好的解决方案。有没有更好的方法来做到这一点,保持我想避免弹出窗口阻止程序?我已经看到在 Angular 中使用了文件保护程序,但我认为我不能从 .zip 文件位置和我们的 FileSaver.saveAs(blob, 'example.zip') 创建一个 Blob。任何建议将不胜感激。

【问题讨论】:

  • 你可以在标签页中打开它,让它下载,因为它是一个文件,大多数浏览器都会再次关闭标签页
  • 看看这个答案:stackoverflow.com/a/39657478/5119765 它展示了如何从 URL 检索 PDF 到 blob。因此,您将能够使用file-saver

标签: javascript angular typescript


【解决方案1】:
download() {
    const url = 'mydomain.com';
    if (url) {
        const link = document.createElement('a');
        link.href =  url;
        document.body.appendChild(link);
        link.click();
    }
}

【讨论】:

    猜你喜欢
    • 2017-01-10
    • 2018-02-19
    • 2018-05-10
    • 1970-01-01
    • 2017-10-22
    • 2018-08-16
    • 1970-01-01
    • 2014-09-13
    相关资源
    最近更新 更多