如何使用从URL下载.zip文件到Angular 4中的用户?

时间:2017-10-17 14:38:37

标签: javascript angular typescript

我有大约10个.csv和10个.xlsx销售商品的文件,每个文件都是压缩的,并且每天部署在由我获取的API获取请求指定的URL上,具体取决于用户想要下载的文件。

所以基本上,当我调用API时,我会返回一串目标网址,而且很热,所以如果您导航到该网址,该文件会为用户下载,但这就是我和#39;我这样做,我想知道是否有更好的方式或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文件位置和我们Blob创建FileSaver.saveAs(blob, 'example.zip')。任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

download() {
    const url = 'mydomain.com';
    if (url) {
        const link = document.createElement('a');
        link.href =  url;
        document.body.appendChild(link);
        link.click();
    }
}