X-Git-Url: https://git.arvados.org/arvados-workbench2.git/blobdiff_plain/33608c44bf33ab330ad1267ab8d56c08634673b5..646e1d88d8aac461e0a13b6c0f1aa1b198e3659c:/src/common/webdav.ts diff --git a/src/common/webdav.ts b/src/common/webdav.ts index 27e1f22d..a09e8fdd 100644 --- a/src/common/webdav.ts +++ b/src/common/webdav.ts @@ -25,9 +25,19 @@ export class WebDAV { this.request({ ...config, url, method: 'PUT', - data, + data }) + upload = (url: string, files: File[], config: WebDAVRequestConfig = {}) => { + return Promise.all( + files.map(file => this.request({ + ...config, url, + method: 'PUT', + data: file + })) + ); + } + copy = (url: string, destination: string, config: WebDAVRequestConfig = {}) => this.request({ ...config, url, @@ -52,7 +62,6 @@ export class WebDAV { return new Promise((resolve, reject) => { const r = this.createRequest(); r.open(config.method, this.defaults.baseURL + config.url); - const headers = { ...this.defaults.headers, ...config.headers }; Object .keys(headers) @@ -62,13 +71,27 @@ export class WebDAV { r.upload.addEventListener('progress', config.onUploadProgress); } - r.addEventListener('load', () => resolve(r)); - r.addEventListener('error', () => reject(r)); + r.addEventListener('load', () => { + if (r.status === 404) { + return reject(r); + } else { + return resolve(r); + } + }); + + r.addEventListener('error', () => { + return reject(r); + }); + + r.upload.addEventListener('error', () => { + return reject(r); + }); r.send(config.data); }); } } + export interface WebDAVRequestConfig { headers?: { [key: string]: string; @@ -87,4 +110,4 @@ interface RequestConfig { headers?: { [key: string]: string }; data?: any; onUploadProgress?: (event: ProgressEvent) => void; -} +} \ No newline at end of file