0.2.0 • Published 11 months ago

@usepa-ngst/pnp-upload v0.2.0

Weekly downloads
-
License
MIT
Repository
github
Last release
11 months ago

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

Build Status

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

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