diff --git a/docs/tasks/LargeFileUploadTask.md b/docs/tasks/LargeFileUploadTask.md index 177875bbf..07fbcb1c2 100644 --- a/docs/tasks/LargeFileUploadTask.md +++ b/docs/tasks/LargeFileUploadTask.md @@ -137,6 +137,7 @@ const options: OneDriveLargeFileUploadOptions = { fileName, rangeSize: 1024 * 1024, uploadEventHandlers, + uploadSessionURL: "optional_custom_uploadSessionURL" //if undefined defaults to "/me/drive/root:/{file-path}:/createUploadSession" }; const readStream = fs.createReadStream(`./fileName`); const fileObject = new StreamUpload(readStream, fileName, totalsize); diff --git a/src/tasks/OneDriveLargeFileUploadTask.ts b/src/tasks/OneDriveLargeFileUploadTask.ts index 04d8072ae..a35b59cea 100644 --- a/src/tasks/OneDriveLargeFileUploadTask.ts +++ b/src/tasks/OneDriveLargeFileUploadTask.ts @@ -33,6 +33,11 @@ export interface OneDriveLargeFileUploadOptions { rangeSize?: number; conflictBehavior?: string; uploadEventHandlers?: UploadEventHandlers; + /// + /// Default upload session url is : "/me/drive/root:/{file-path}:/createUploadSession" + /// Set this property to override the default upload session url. Example: "/me/drive/special/{name}" + /// + uploadSessionURL?: string; } /** @@ -161,7 +166,7 @@ export class OneDriveLargeFileUploadTask extends LargeFileUploadTask { if (!client || !fileObject || !options) { throw new GraphClientError("Please provide the Graph client instance, FileObject interface implementation and OneDriveLargeFileUploadOptions value"); } - const requestUrl = OneDriveLargeFileUploadTask.constructCreateSessionUrl(options.fileName, options.path); + const requestUrl = options.uploadSessionURL ? options.uploadSessionURL: OneDriveLargeFileUploadTask.constructCreateSessionUrl(options.fileName, options.path); const uploadSessionPayload: OneDriveFileUploadSessionPayLoad = { fileName: options.fileName, fileDescription: options.fileDescription, diff --git a/test/development/workload/largeFileUpload.ts b/test/development/workload/largeFileUpload.ts index 8487808bf..077305c44 100644 --- a/test/development/workload/largeFileUpload.ts +++ b/test/development/workload/largeFileUpload.ts @@ -58,4 +58,17 @@ describe("LargeFileUpload", () => { const response = await uploadTask.upload(); assert.isDefined(response.responseBody["id"]); }).timeout(30 * 1000); + + it("Test OneDrive File Upload to custom url", async () => { + const options: OneDriveLargeFileUploadOptions = { + path: "/Documents", + fileName, + rangeSize: 1024 * 1024, + uploadSessionURL: `https://graph.microsoft.com/v1.0/me/drive/special/approot:/sampleTest/${fileName}:/createUploadSession`, + }; + const file = fs.readFileSync(`./test/sample_files/${fileName}`); + const uploadTask = await OneDriveLargeFileUploadTask.create(client, file, options); + const response = await uploadTask.upload(); + assert.isDefined(response.responseBody["id"]); + }).timeout(30 * 1000); });