add FileUtilsService to provide utility methods for file operations in Angular

pull/17860/head
Mahmut Gundogdu 1 year ago
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.

@ -1153,6 +1153,10 @@
{
"text": "Content Security Strategy",
"path": "UI/Angular/Content-Security-Strategy.md"
},
{
"text":"File Utils Service",
"path":"UI/Angular/File-Utils-Service.md"
}
]
},

@ -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);
}
}

@ -21,3 +21,4 @@ export * from './track-by.service';
export * from './local-storage.service';
export * from './window.service';
export * from './internet-connection-service'
export * from './file-utils.service'

Loading…
Cancel
Save