diff --git a/ui-admin/src/js/components/database/data-browser/DataBrowser.jsx b/ui-admin/src/js/components/database/data-browser/DataBrowser.jsx index ca7830e87a9d0be95cda22b93f3f2840a065c7fa..1af92879bb616bd0a0c28bc20878f2ba80c26765 100644 --- a/ui-admin/src/js/components/database/data-browser/DataBrowser.jsx +++ b/ui-admin/src/js/components/database/data-browser/DataBrowser.jsx @@ -340,15 +340,12 @@ class DataBrowser extends React.Component { } async downloadFile(file) { - if ('showSaveFilePicker' in window) { - try { - this.setState({ loading: true, progress: 0 }) - await this.controller.downloadAndSaveFile(file, this.updateProgress) - } finally { - this.setState({ loading: false, progress: 0 }) - } - } else { - this.openErrorDialog(messages.get(messages.DOWNLOADS_NOT_SUPPORTED)) + try { + this.setState({ loading: true, progress: 0 }) + const blob = await this.fileToBlob(file) + this.downloadBlob(blob, file.name) + } finally { + this.setState({ loading: false, progress: 0 }) } } @@ -366,7 +363,7 @@ class DataBrowser extends React.Component { } async fileToBlob(file) { - const dataArray = await this.controller.downloadFile(file) + const dataArray = await this.controller.download(file) return new Blob(dataArray, { type: this.inferMimeType(file.path) }) } diff --git a/ui-admin/src/js/components/database/data-browser/DataBrowserController.js b/ui-admin/src/js/components/database/data-browser/DataBrowserController.js index 693cd0da45d77d7435443247e66916d71e17e065..6ff572b5dd8a29c6c2a7dec8323121110b844850 100644 --- a/ui-admin/src/js/components/database/data-browser/DataBrowserController.js +++ b/ui-admin/src/js/components/database/data-browser/DataBrowserController.js @@ -217,39 +217,6 @@ export default class DataBrowserController extends ComponentController { return dataArray } - async downloadAndSaveFile(file, onProgressUpdate) { - try { - const fileHandle = await window.showSaveFilePicker( - { - startIn: 'downloads', - id: 'download-file-picker', - suggestedName: file.name - }) - const writable = await fileHandle.createWritable() - - try { - let offset = 0 - - const size = file.size - while (offset < size) { - const chunk = await this._download(file, offset) - await writable.write(chunk) - offset += CHUNK_SIZE - - const progress = Math.round((offset / size) * 100) - onProgressUpdate(Math.min(progress, 100)) - } - } finally { - onProgressUpdate(100) - await writable.close() - } - } catch (error) { - if (error.name !== 'AbortError') { - throw error - } - } - } - async _download(file, offset) { const limit = Math.min(CHUNK_SIZE, file.size - offset) return await openbis.read(this.owner, file.path, offset, limit)