From: Michal Klobukowski Date: Mon, 13 Aug 2018 15:04:55 +0000 (+0200) Subject: Extract file utils X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/d260d2473cd7faefb0f06cedfb26ef5abda7e012 Extract file utils Feature #14013 Arvados-DCO-1.1-Signed-off-by: Michal Klobukowski --- diff --git a/src/common/file.ts b/src/common/file.ts new file mode 100644 index 0000000000..3f17a38ffe --- /dev/null +++ b/src/common/file.ts @@ -0,0 +1,12 @@ +// Copyright (C) The Arvados Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + +export const fileToArrayBuffer = (file: File) => + new Promise(resolve => { + const reader = new FileReader(); + reader.onload = () => { + resolve(reader.result as ArrayBuffer); + }; + reader.readAsArrayBuffer(file); + }); diff --git a/src/services/collection-service/collection-service.ts b/src/services/collection-service/collection-service.ts index 3b98f750ec..c611f3668d 100644 --- a/src/services/collection-service/collection-service.ts +++ b/src/services/collection-service/collection-service.ts @@ -10,6 +10,7 @@ import { WebDAV } from "../../common/webdav"; import { AuthService } from "../auth-service/auth-service"; import { mapTreeValues } from "../../models/tree"; import { parseFilesResponse } from "./collection-service-files-response"; +import { fileToArrayBuffer } from "../../common/file"; export type UploadProgress = (fileId: number, loaded: number, total: number, currentTime: number) => void; @@ -42,27 +43,19 @@ export class CollectionService extends CommonResourceService url: this.webdavClient.defaults.baseURL + file.url + '?api_token=' + this.authService.getApiToken() }) - private uploadFile(collectionUuid: string, file: File, fileId: number, onProgress: UploadProgress = () => { return; }) { - return this.readFile(file).then(content => - this.webdavClient.put(`/c=${collectionUuid}/${file.name}`, content, { - headers: { - 'Content-Type': 'text/octet-stream' - }, - onUploadProgress: (e: ProgressEvent) => { - onProgress(fileId, e.loaded, e.total, Date.now()); - } - }) - ); - } + private async uploadFile(collectionUuid: string, file: File, fileId: number, onProgress: UploadProgress = () => { return; }) { + const fileURL = `/c=${collectionUuid}/${file.name}`; + const fileContent = await fileToArrayBuffer(file); + const requestConfig = { + headers: { + 'Content-Type': 'text/octet-stream' + }, + onUploadProgress: (e: ProgressEvent) => { + onProgress(fileId, e.loaded, e.total, Date.now()); + } + }; + return this.webdavClient.put(fileURL, fileContent, requestConfig); - private readFile(file: File): Promise { - return new Promise(resolve => { - const reader = new FileReader(); - reader.onload = () => { - resolve(reader.result as ArrayBuffer); - }; - reader.readAsArrayBuffer(file); - }); } }