UNPKG

@clemox/ngx-file-saver

Version:

URL or blob download helper

86 lines (81 loc) 2.83 kB
import * as i0 from '@angular/core'; import { Injectable } from '@angular/core'; class NgxFileSaverService { saveUrl(url, fileName) { const anchor = this.clickUrlPrepare(url, fileName); if (anchor === undefined) { this.downloadProcess(url, fileName); } else { this.clickUrlProcess(anchor); } } saveBlob(data, fileName) { const anchor = this.clickBlobPrepare(data, fileName); this.clickBlobProcess(anchor); } // clickUrlPrepare(url, name) { let result = document.createElement('a'); result.download = name; result.href = url; result.rel = 'noopener'; if (result.origin !== undefined && result.origin !== window.location.origin) { result.target = '_blank'; if (this.isCorsEnabled(result.href)) { result = undefined; } } return result; } clickUrlProcess(anchor) { try { anchor.dispatchEvent(new MouseEvent('click')); } catch (e) { anchor.click(); } } clickBlobPrepare(data, name) { const result = document.createElement('a'); result.download = name; result.href = URL.createObjectURL(data); result.rel = 'noopener'; return result; } clickBlobProcess(anchor) { setTimeout(() => { URL.revokeObjectURL(anchor.href); }, 4E4); // 40s setTimeout(() => { this.clickUrlProcess(anchor); }, 0); } downloadProcess(url, name) { const xhr = new XMLHttpRequest(); xhr.responseType = 'blob'; xhr.open('GET', url); xhr.onload = (() => this.saveBlob(xhr.response, name)); xhr.onerror = (() => console.error('could not download file')); xhr.send(); } isCorsEnabled(url) { const xhr = new XMLHttpRequest(); xhr.open('HEAD', url, false); try { xhr.send(); } catch (e) { } return (xhr.status >= 200 && xhr.status <= 299); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: NgxFileSaverService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: NgxFileSaverService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: NgxFileSaverService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }] }); /* * Public API Surface of ngx-file-saver */ /** * Generated bundle index. Do not edit. */ export { NgxFileSaverService }; //# sourceMappingURL=clemox-ngx-file-saver.mjs.map