【Angular】Angular使用HTTP的GET/POST下载流文件

方法一: a标签直接通过链接地址下载

正常情况下,通过window.location = url就可以下载文件。浏览器判断这个链接是一个资源而不是页面的时候,就会自动下载文件。

但是通过文件流生成的url对应的资源是没有文件名的,需要添加文件名。这个时候就可以用到a标签,a标签我们经常会用到href属性,但是其实还有一个download属性,这个属性就指定了下载的文件名,代码如下:

let a = document.createElement('a');
a.href = objectUrl; // 文件流生成的url
a.download = fileName; // 文件名
document.body.appendChild(a);
a.click();
a.remove();

方法二:二进制流接收文件

获取数据需要在请求的时候设置responseType: 'blob'
拿到文件流之后,需要生成一个URL才可以下载。
可以通过URL.createObjectURL()方法生成一个链接,代码如下:

download() {
      this.http.get('/media/api/storage/download?path=' + this.showMedia.mediaPath + this.showMedia.mediaName,{responseType:'blob'}).subscribe(data =>{
        const link = document.createElement('a');
        const blob = new Blob([data]);
        link.style.display = 'none';
        link.href = URL.createObjectURL(blob);
        link.setAttribute('download', `${this.showMedia.mediaName}`);
        document.body.appendChild(link);
        link.click()
        document.body.removeChild(link);
      });
  }

什么是Blob呢,MDN官方解释:Blob 对象表示一个不可变、原始数据的类文件对象。Blob
表示的不一定是JavaScript原生格式的数据(https://developer.mozilla.org/zh-CN/docs/Web/API/Blob)

后端传过来的文件流存储在内存中,然后生成的URL就是文件流在内存中的地址,当然这个地址是临时的,浏览器在 document 卸载的时候,会自动释放它们。MDN官方建议,当不再需要这些URL对象的时候,应该调用URL.revokeObjectURL()主动释放。

https://segmentfault.com/a/1190000023077368
https://www.cnblogs.com/woai3c/p/11262491.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Angular 中,可以使用 HttpClient 来进行文件上传和下载文件上传: 1. 首先,需要在 HTML 文件中添加一个 input 标签,用于选择文件: ```html <input type="file" (change)="onFileSelected($event.target.files)"> ``` 2. 在组件中,需要定义一个方法来处理文件选择事件,并将选中的文件保存在一个变量中: ```typescript selectedFile: File; onFileSelected(files: FileList) { this.selectedFile = files.item(0); } ``` 3. 接下来,需要编写一个方法来将文件上传到服务器: ```typescript onUpload() { const formData = new FormData(); formData.append('file', this.selectedFile); this.http.post('http://example.com/upload', formData) .subscribe(response => { console.log('File uploaded successfully'); }); } ``` 其中,`FormData` 是一个用于将表单数据转换为键值对的类,可以用来构建一个包含文件的表单数据。通过调用 `append` 方法,可以将文件添加到表单数据中。然后,使用 HttpClient 的 `post` 方法将表单数据发送到服务器。 文件下载: 1. 首先,需要定义一个方法来从服务器下载文件: ```typescript onDownload() { this.http.get('http://example.com/download', { responseType: 'blob' }) .subscribe(response => { const blob = new Blob([response], { type: 'application/octet-stream' }); const url = window.URL.createObjectURL(blob); window.open(url); }); } ``` 其中,`responseType: 'blob'` 表示响应数据的类型为 Blob 对象。然后,使用 Blob 构造函数将响应数据转换为 Blob 对象。接着,使用 `createObjectURL` 方法将 Blob 对象转换为 URL 地址,最后调用 `window.open` 方法打开下载链接即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卸载引擎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值