我有大约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')
。任何建议都将不胜感激。
答案 0 :(得分:0)
download() {
const url = 'mydomain.com';
if (url) {
const link = document.createElement('a');
link.href = url;
document.body.appendChild(link);
link.click();
}
}