mirror of https://github.com/abpframework/abp
parent
99806b7621
commit
e99a7d47c9
@ -0,0 +1,37 @@
|
||||
# File Utils Service
|
||||
FileUtilsService is an Angular service designed to provide utility methods related to file operations. The service has a `downloadBlob` function, which is used for downloading blobs as files within the context of a web application.
|
||||
|
||||
## Usage
|
||||
|
||||
To make use of the FileUtilsService in your Angular application, follow the steps below:
|
||||
|
||||
Injection:
|
||||
Firstly, ensure that the service is injected into the component or any other Angular entity where you wish to use it.
|
||||
|
||||
```js
|
||||
import { FileUtilsService } from '@abp/ng.core';
|
||||
|
||||
constructor(private fileUtils: FileUtilsService) { }
|
||||
// or
|
||||
// private fileUtils = inject(FileUtilsService)
|
||||
```
|
||||
|
||||
Downloading a Blob:
|
||||
|
||||
Once you have the service injected, you can use the downloadBlob method to initiate the download of blob data as a file. For instance:
|
||||
|
||||
```js
|
||||
someMethod() {
|
||||
const myBlob = new Blob(["Hello, World!"], { type: "text/plain" });
|
||||
this.fileUtils.downloadBlob(myBlob, "hello.txt");
|
||||
}
|
||||
```
|
||||
|
||||
Permissions & Considerations:
|
||||
|
||||
Ensure that you have appropriate permissions and user interactions before triggering a download. Since downloadBlob initiates a download programmatically, it's best to tie this action to direct user interactions, such as button clicks, to prevent unexpected behaviors or browser restrictions.
|
||||
|
||||
|
||||
### DOCUMENT Token in Service
|
||||
|
||||
Angular, being a platform-agnostic framework, is designed to support not only browser-based applications but also other environments like server-side rendering (SSR) through Angular Universal. This design philosophy introduces challenges when accessing global browser-specific objects like window or document directly. To address this, Angular provides a DOCUMENT token that can be used to inject the document object into Angular entities like components and services.
|
@ -0,0 +1,29 @@
|
||||
import { Injectable, inject } from '@angular/core';
|
||||
import { DOCUMENT } from '@angular/common';
|
||||
|
||||
@Injectable({
|
||||
providedIn: 'root',
|
||||
})
|
||||
export class FileUtilsService {
|
||||
protected readonly document = inject(DOCUMENT);
|
||||
get window() {
|
||||
return this.document.defaultView;
|
||||
}
|
||||
downloadBlob(blob: Blob, fileName: string) {
|
||||
const blobUrl = this.window.URL.createObjectURL(blob);
|
||||
const a = this.document.createElement('a');
|
||||
a.style.display = 'none';
|
||||
a.href = blobUrl;
|
||||
a.download = fileName;
|
||||
this.document.body.appendChild(a);
|
||||
a.dispatchEvent(
|
||||
new MouseEvent('click', {
|
||||
bubbles: true,
|
||||
cancelable: true,
|
||||
view: this.window,
|
||||
}),
|
||||
);
|
||||
this.window.URL.revokeObjectURL(blobUrl);
|
||||
this.document.body.removeChild(a);
|
||||
}
|
||||
}
|
Loading…
Reference in new issue