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);
});