77 lines
2.1 KiB
TypeScript
77 lines
2.1 KiB
TypeScript
import { Injectable } from '@angular/core';
|
||
import { _HttpClient } from '@delon/theme';
|
||
import * as FileSaver from 'file-saver';
|
||
import { NzModalService } from 'ng-zorro-antd/modal';
|
||
|
||
@Injectable({
|
||
providedIn: 'root',
|
||
})
|
||
export class EAFileUtil {
|
||
constructor(private modal: NzModalService, private http: _HttpClient) {}
|
||
|
||
/**
|
||
* 保存文件
|
||
* @param content 需要保存的内容
|
||
* @param filename 文件名
|
||
* @param confirm 显示确认框
|
||
*/
|
||
save(content: any, filename: string, confirm: boolean = true): void {
|
||
const blob = new Blob([JSON.stringify(content)], { type: 'text/plain;charset=utf-8' });
|
||
if (confirm === true) {
|
||
this.modal.confirm({
|
||
nzTitle: '<i>文件下载确认</i>',
|
||
nzContent: `<b>是否下载文件:<u><i>${filename}</i></u> ?</b>`,
|
||
nzOnOk: () => {
|
||
FileSaver.saveAs(blob, filename);
|
||
},
|
||
});
|
||
} else {
|
||
FileSaver.saveAs(blob, filename);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @param url 接口地址
|
||
* @param body post请求参数
|
||
* @param params get请求参数
|
||
* @method 请求方法
|
||
*/
|
||
download(url: string, body: any, params: any, method: 'POST' | 'GET' = 'POST'): void {
|
||
if (method === 'POST') {
|
||
this.http
|
||
.post(url, body, params, {
|
||
responseType: 'blob',
|
||
observe: 'response',
|
||
})
|
||
.subscribe((res) => {
|
||
this.saveBlob(res);
|
||
});
|
||
} else if (method === 'GET') {
|
||
this.http
|
||
.get(url, params, {
|
||
responseType: 'blob',
|
||
observe: 'response',
|
||
})
|
||
.subscribe((res) => {
|
||
this.saveBlob(res);
|
||
});
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 创建blob对象,并利用浏览器打开url进行下载
|
||
* @param data 文件流数据
|
||
*/
|
||
private saveBlob(res: any): void {
|
||
const disp = res.headers.get('Content-Disposition');
|
||
const blob = new Blob([res.body], { type: 'text/plain;charset=utf-8' });
|
||
const url = window.URL.createObjectURL(blob);
|
||
const a = document.createElement('a');
|
||
const fileName = disp.split(';')[1].split('=')[1];
|
||
a.href = url;
|
||
a.download = decodeURI(fileName);
|
||
a.click();
|
||
window.URL.revokeObjectURL(url);
|
||
}
|
||
}
|