51 lines
1.6 KiB
TypeScript
51 lines
1.6 KiB
TypeScript
import { FileDownloadRequest } from "./file-download.request";
|
|
|
|
export class FileDownloadBuilder {
|
|
get blobOptions(): any {
|
|
const options = this._request.blobOptions ?? {};
|
|
if (options.type == null) {
|
|
options.type = this.fileType;
|
|
}
|
|
return options;
|
|
}
|
|
|
|
get blob(): Blob {
|
|
if (this.blobOptions != null) {
|
|
return new Blob([this._request.blobData], this.blobOptions);
|
|
} else {
|
|
return new Blob([this._request.blobData]);
|
|
}
|
|
}
|
|
|
|
get downloadMethod(): "save" | "open" {
|
|
if (this._request.downloadMethod != null) {
|
|
return this._request.downloadMethod;
|
|
}
|
|
return this.fileType != "application/pdf" ? "save" : "open";
|
|
}
|
|
|
|
private get fileType() {
|
|
const fileNameLower = this._request.fileName.toLowerCase();
|
|
if (fileNameLower.endsWith(".pdf")) {
|
|
return "application/pdf";
|
|
} else if (fileNameLower.endsWith(".xlsx")) {
|
|
return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
|
} else if (fileNameLower.endsWith(".docx")) {
|
|
return "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
|
|
} else if (fileNameLower.endsWith(".pptx")) {
|
|
return "application/vnd.openxmlformats-officedocument.presentationml.presentation";
|
|
} else if (fileNameLower.endsWith(".csv")) {
|
|
return "text/csv";
|
|
} else if (fileNameLower.endsWith(".png")) {
|
|
return "image/png";
|
|
} else if (fileNameLower.endsWith(".jpg") || fileNameLower.endsWith(".jpeg")) {
|
|
return "image/jpeg";
|
|
} else if (fileNameLower.endsWith(".gif")) {
|
|
return "image/gif";
|
|
}
|
|
return null;
|
|
}
|
|
|
|
constructor(private readonly _request: FileDownloadRequest) {}
|
|
}
|