没有链接的Typescript blob文件名

10

如何在typescript中为blob设置文件名?对于IE浏览器,我可以轻松设置文件名,但是对于Chrome浏览器似乎不可能。基本上,我需要类似于这个解决方案,但是使用typescript。

downloadFile(data: any) {
    var blob = new Blob([data], {type: 'text/csv'});
    let fileName = 'my-test.csv';

    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
        //save file for IE
        window.navigator.msSaveOrOpenBlob(blob, fileName);
    } else {
        //save for other browsers: Chrome, Firefox

        var objectUrl = URL.createObjectURL(blob);
        window.open(objectUrl);
    }
}

这个函数是从HTML UI / Angular 2调用的:

<button type="button" class="btn btn-success"
(click)="downloadFile('test')">Download <br /> Download </button>

你尝试过给你的按钮添加一个“download”属性吗? - null canvas
它不会与下载属性一起工作。 - playerone
2个回答

28

1
好的答案,只有最后一行有一个问题。我认为它应该是 objectUrl 而不是 url - CornelC
1
你可能想为removeChild添加一个小的超时函数,否则某些浏览器(如Edge)会在完成点击之前删除锚点。 - HenrikP
经过一天多的挣扎,这最终有所帮助了。谢谢! - Jnr

1
以下是适用于IE、Chrome和Firefox的下载方法:

在这里,我们将介绍如何进行下载:

  downloadCsvFile(data, fileName) {
    const csvName = fileName +  '.csv';
    const blob = new Blob([data], {type: 'text/csv'});
    if (window.navigator && window.navigator.msSaveOrOpenBlob) { // IE
      window.navigator.msSaveOrOpenBlob(blob, csvName);
      window.navigator.msSaveOrOpenBlob(blob, csvName);
    } else { //Chrome & Firefox
      const a = document.createElement('a');
      const url = window.URL.createObjectURL(blob);
      a.href = url;
      a.download = csvName;
      a.click();
      window.URL.revokeObjectURL(url);
      a.remove();
    }
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接