mirror of
https://github.com/bitwarden/browser
synced 2025-12-22 11:13:46 +00:00
[fix] Force send attachment to always download and never open (#2908)
* [refactor] Introduce a file download service * [refactor] Point platformUtilsService.saveFile() callers to fileDownloadService.download() instead * [refactor] Remove platformUtilsService.saveFile() * [fix] Force send attachments to always download and never open * [fix] Remove the window property from FileDownloadRequest * [fix] Move FileDownloadRequest to /abstractions/fileDownload * [fix] Simplify FileDownloadRequest to a type * [fix] Move BrowserApi.saveFile logic into BrowserFileDownloadService * [fix] Use proper blob types for file downloads * [fix] forceDownload -> downloadMethod on FileDownloadRequest * [fix] Remove fileType from FileDownloadRequest * [fix] Make fileType private
This commit is contained in:
@@ -104,54 +104,6 @@ export class WebPlatformUtilsService implements PlatformUtilsService {
|
||||
document.body.removeChild(a);
|
||||
}
|
||||
|
||||
saveFile(win: Window, blobData: any, blobOptions: any, fileName: string): void {
|
||||
let blob: Blob = null;
|
||||
let type: string = null;
|
||||
const fileNameLower = fileName.toLowerCase();
|
||||
let doDownload = true;
|
||||
if (fileNameLower.endsWith(".pdf")) {
|
||||
type = "application/pdf";
|
||||
doDownload = false;
|
||||
} else if (fileNameLower.endsWith(".xlsx")) {
|
||||
type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
|
||||
} else if (fileNameLower.endsWith(".docx")) {
|
||||
type = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
|
||||
} else if (fileNameLower.endsWith(".pptx")) {
|
||||
type = "application/vnd.openxmlformats-officedocument.presentationml.presentation";
|
||||
} else if (fileNameLower.endsWith(".csv")) {
|
||||
type = "text/csv";
|
||||
} else if (fileNameLower.endsWith(".png")) {
|
||||
type = "image/png";
|
||||
} else if (fileNameLower.endsWith(".jpg") || fileNameLower.endsWith(".jpeg")) {
|
||||
type = "image/jpeg";
|
||||
} else if (fileNameLower.endsWith(".gif")) {
|
||||
type = "image/gif";
|
||||
}
|
||||
if (type != null) {
|
||||
blobOptions = blobOptions || {};
|
||||
if (blobOptions.type == null) {
|
||||
blobOptions.type = type;
|
||||
}
|
||||
}
|
||||
if (blobOptions != null) {
|
||||
blob = new Blob([blobData], blobOptions);
|
||||
} else {
|
||||
blob = new Blob([blobData]);
|
||||
}
|
||||
|
||||
const a = win.document.createElement("a");
|
||||
if (doDownload) {
|
||||
a.download = fileName;
|
||||
} else if (!this.isSafari()) {
|
||||
a.target = "_blank";
|
||||
}
|
||||
a.href = URL.createObjectURL(blob);
|
||||
a.style.position = "fixed";
|
||||
win.document.body.appendChild(a);
|
||||
a.click();
|
||||
win.document.body.removeChild(a);
|
||||
}
|
||||
|
||||
getApplicationVersion(): Promise<string> {
|
||||
return Promise.resolve(process.env.APPLICATION_VERSION || "-");
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user