【问题标题】:How can I download file using Angular 5?如何使用 Angular 5 下载文件?
【发布时间】:2019-01-27 20:22:57
【问题描述】:

当我将my_example_link 粘贴到浏览器中时,文件会以正确的方式自动下载。但是,当我使用下面显示的源代码时,下载不起作用。单击download 按钮后,我想下载文件。有什么想法有什么问题吗?我没有收到任何错误。

user.service.ts:

DownloadFiles() {

    return this.http.get('my_example_link', {responseType: 'text'});

}

uploader.service.ts:

DownloadFile(){

      this.userService.DownloadFiles()
          .subscribe(
              (data) => this.downloadFile2(data)), // console.log(data),
              (error) => console.log("Error downloading the file."),
              () => console.info("OK");
}

downloadFile2(data: Response){
  var blob = new Blob([data], { type: 'text/csv' });
  var url= window.URL.createObjectURL(blob);
  window.open(url);
}

something.component.html:

<li class="nav-item" *ngIf="isCloud()">
    <a  (click)="this.UploaderService.DownloadFile()" download="file23.txt" style='cursor: pointer;' class="nav-link" target="_blank">
        <i class="nc-icon nc-basket"></i> Download
    </a>
</li>

【问题讨论】:

  • 获取文件下载的最简单方法是使用此处显示的大多数现代浏览器本机提供的下载属性:w3schools.com/tags/att_a_download.asp ...如果您绝对必须通过 xhr 进行,那么最简单的方法方法是在服务器上设置正确的响应头。否则你会头疼。
  • @bryan60 问题是我使用HttpResponseRedirect通过后端从hadoop下载了这个文件,所以我需要以blob形式发送数据,然后将其保存在用户的本地系统中。跨度>

标签: angular html typescript angular5


【解决方案1】:

使用数组缓冲区

this.httpClient.get(url, {responseType: 'arraybuffer',headers:headers});

保存文件:

 npm install file-saver --save

 import { saveAs } from 'file-saver/FileSaver';

组件:

downLoadFile(data: any, type: string) {
        var blob = new Blob([data], { type: type.toString() });
        var url = window.URL.createObjectURL(blob);
        saveAs(blob,"file_name.txt");
        window.open(url);

    }

【讨论】:

  • 是否可以用他的原始名称保存转换为 blob 的文件?目前我用名称unknown保存文件。
  • 如果我没有足够清楚地定义它,请原谅我。我的意思是是否可以使用带有他的文件名的 blob 下载文件?在上面的示例中,我们手动添加文件名。我想知道是否可以使用 blob 自动执行此操作。还是 blob 只包含有关文件的信息而没有他的名字?
  • 我的意思是说,如果您收到的响应是具有原始名称的文件,您可以保存
  • 您需要创建一个包含文件数据、文件名、文件类型等的对象。从 api 发送该对象。
  • 如果有人收到错误“找不到模块'file-saver/FileSaver'”,FileSaver 位于文件保护程序的 dist 文件夹中。所以路径将是“import { saveAs } from 'file-saver/dist/FileSaver'”
猜你喜欢
  • 1970-01-01
  • 2018-10-06
  • 2018-10-06
  • 2018-10-06
  • 1970-01-01
  • 1970-01-01
  • 2017-10-22
  • 1970-01-01
相关资源
最近更新 更多