@usepa-ngst/pnp-upload
v0.2.0
Published
SharePoint large files uploader using PnPjs
Downloads
7
Readme
#Note: Module was forked from https://www.npmjs.com/package/pnp-upload
- I changed the dependency in package.json to pnp/sp from pnp/pnpjs so that we could likn this package in dev when using pnpm and @usepa-ngst/dev-link
- This module gives a 'Warning: Accessing non-existent property '*****' of module exports inside circular dependency' when run with Node 14+. A newer version of pnp/sp dependency 3+ would have to be used but this would require rewrite of this module to consume new major version.
##Sample
const filePath = '<path to file>';
const folderUrl = 'Shared Documents/<folder>';
let context = {
// environmentName: 'SharePoint Online',
siteUrl: 'https://sharepoint.com/sites/<site folder>',
authOptions: {
clientId: <clienID>,
clientSecret: <clientSecret>'
}
};
const upload = new Upload(context);
const folderRelativeUrl = `/${context.siteUrl.split('/').slice(3).join('/')}/${folderUrl}`;
console.log(folderRelativeUrl);
upload
.addChunked(folderRelativeUrl, filePath, (data) => {
console.log(`Uploading ${filePath} [:bar] ${data.fileSize} B`)
})
.then(() => console.log('Done'))
.catch(console.warn);
SharePoint: Large files upload example using PnPjs from Node.js
Supported SharePoint versions
- SharePoint Online
- SharePoint On-Prem (2019/2016)
Dependencies
npm install
Test
Replace ./test/ReplaceWithLargeOne.avi
with a large file to upload to SharePoint.
In a console, run the following command:
npm run test
Provide SharePoint credentials during first execution.
Upload method
PnPjs's .addChunked
API implementation is used for uploading a large document in chunks.
Authentication
A variety of different authentication strategies are covered using node-sp-auth
library.
pnp-auth
Node.js fetch client is used to proxy all available auth strategies.
Usage sample
const filePath = './file-path.ext';
const folderUrl = 'Shared Documents';
// context - authentication context, see `./test/upload.test.ts` for more details
const upload = new Upload(context);
const folderRelativeUrl = `/${context.siteUrl.split('/').slice(3).join('/')}/${folderUrl}`;
let progress: ProgressBar = null;
upload
.addChunked(folderRelativeUrl, filePath, (data) => {
if (!progress) {
progress = new ProgressBar(`Uploading ${filePath} [:bar] ${data.fileSize} KB`, { total: data.totalBlocks });
}
progress.tick();
})
.then(() => console.log('Done'))
.catch(console.warn);