mirror of https://github.com/abpframework/abp.git
4 changed files with 71 additions and 0 deletions
@ -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