diff --git a/__tests__/utils/upload.spec.ts b/__tests__/utils/upload.spec.ts index 556d4a20..818697c0 100644 --- a/__tests__/utils/upload.spec.ts +++ b/__tests__/utils/upload.spec.ts @@ -75,6 +75,7 @@ describe('Initialize chunks upload temporary workspace', () => { retries: 5, retryDelay: expect.any(Function), }, + headers: {}, }) }) diff --git a/lib/uploader/uploader.ts b/lib/uploader/uploader.ts index 0b4a8c92..d2584ea0 100644 --- a/lib/uploader/uploader.ts +++ b/lib/uploader/uploader.ts @@ -493,7 +493,7 @@ export class Uploader { logger.debug('Initializing chunked upload', { file, upload }) // Let's initialize a chunk upload - const tempUrl = await initChunkWorkspace(encodedDestinationFile, retries, this._isPublic) + const tempUrl = await initChunkWorkspace(encodedDestinationFile, retries, this._isPublic, this._customHeaders) const chunksQueue: Array> = [] // Generate chunks array diff --git a/lib/utils/upload.ts b/lib/utils/upload.ts index 5535f87c..461892f3 100644 --- a/lib/utils/upload.ts +++ b/lib/utils/upload.ts @@ -116,8 +116,9 @@ export const getChunk = function(file: File, start: number, length: number): Pro * @param destinationFile The file name after finishing the chunked upload * @param retries number of retries * @param isPublic whether this upload is in a public share or not + * @param customHeaders Custom HTTP headers used when creating the workspace (e.g. X-NC-Nickname for file drops) */ -export const initChunkWorkspace = async function(destinationFile: string | undefined = undefined, retries: number = 5, isPublic: boolean = false): Promise { +export const initChunkWorkspace = async function(destinationFile: string | undefined = undefined, retries: number = 5, isPublic: boolean = false, customHeaders: Record = {}): Promise { let chunksWorkspace: string if (isPublic) { chunksWorkspace = `${getBaseUrl()}/public.php/dav/uploads/${getSharingToken()}` @@ -128,7 +129,10 @@ export const initChunkWorkspace = async function(destinationFile: string | undef const hash = [...Array(16)].map(() => Math.floor(Math.random() * 16).toString(16)).join('') const tempWorkspace = `web-file-upload-${hash}` const url = `${chunksWorkspace}/${tempWorkspace}` - const headers = destinationFile ? { Destination: destinationFile } : undefined + const headers = customHeaders + if (destinationFile) { + headers.Destination = destinationFile + } await axios.request({ method: 'MKCOL',