Skip to content

Latest commit

 

History

History
86 lines (68 loc) · 2.14 KB

File metadata and controls

86 lines (68 loc) · 2.14 KB

Large File Upload Task - Uploading large files to OneDrive.

This task simplifies the implementation of onedrive's resumable upload.

Creating the client instance

Refer this documentation for initializing the client.

Uploading from browser

HTML to select the file for uploading.

<input id="fileUpload" type="file" onchange="fileUpload(this)" />

Get files from the input element and start uploading.

async function fileUpload(elem) {
	let file = elem.files[0];
	try {
		let response = await largeFilUpload(client, file, file.name);
	} catch (error) {
		console.error(error);
	}
}

Uploading from NodeJS

function uploadFile() {
    fs.readFile(<PATH_OF_THE_FILE>, {}, function (err, file) {
        if(err) {
            throw err;
        }
        let fileName = <NAME_OF_THE_FILE>;
        largeFileUpload(client, file, fileName)
        .then((response) => {
            console.log(response);
        })
        .catch((error) => {
            console.error(error);
        });
    });
}

Creating session and start uploading

async function uploadFile(client, file) {
	try {
		let options = {
			path: "/Documents",
			fileName: file.name,
			rangeSize: 1024 * 1024,
		};
		const uploadTask = await MicrosoftGraph.OneDriveLargeFileUploadTask.create(client, file, options);
		const response = await uploadTask.upload();
		console.log(response);
		console.log("File Uploaded Successfully.!!");
	} catch (err) {
		console.log(err);
	}
}

We can just resume the broken upload

Lets consider some break down happens in the middle of uploading, with the uploadTask object in hand you can resume easily.

uploadTask.resume();

Even you can control the whole upload process

You can create the upload task, and play with it by using sliceFile and uploadSlice methods

let range = uploadTask.getNextRange();
let slicedFile = uploadTask.sliceFile(range);
uploadTask.uploadSlice(slicedFile, range, uploadTask.file.size);