This task simplifies the implementation of OneDrive's resumable upload.
Refer this documentation for initializing the client.
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 largeFileUpload(client, file, file.name);
console.log(response);
console.log("File Uploaded Successfully.!!");
} catch (error) {
console.error(error);
}
}
async function largeFileUpload(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();
return response;
} catch (err) {
console.log(err);
}
}
function uploadFile() {
fs.readFile("<PATH_OF_THE_FILE>", {}, function(err, file) {
if (err) {
throw err;
}
let fileName = "<NAME_OF_THE_FILE_WITH_EXTN>";
oneDriveLargeFileUpload(client, file, fileName)
.then((response) => {
console.log(response);
console.log("File Uploaded Successfully.!!");
})
.catch((error) => {
console.error(error);
});
});
}
async function oneDriveLargeFileUpload(client, file, fileName) {
try {
let options = {
path: "/Documents",
fileName,
rangeSize: 1024 * 1024,
};
const uploadTask = await OneDriveLargeFileUploadTask.create(client, file, options);
const response = await uploadTask.upload();
return response;
} catch (err) {
console.log(err);
}
}
Lets consider some break down happens in the middle of uploading, with the uploadTask object in hand you can resume easily.
uploadTask.resume();
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);