/node-file-management

Simple file management via a provider like S3

Primary LanguageJavaScriptMIT LicenseMIT

file-management

Sonar Sonar Sonar Sonar Sonar Sonar

Library for easy file storage and management supporting upload, downloads and deletes

Description

It relies on an abstract concept of provider to do the work needed. The only concrete implementation, for now, is that of the S3 provider

Tests

TO run integration tests (test/integration dir) you must provide 'AWS_ACCESS_KEY_ID', AWS_SECRET_ACCESS_KEY and AWS_REGION env vars

Examples (S3):

Upload (uploads a file to storage)

const fileManagement = require('file-management');
const fs = require('fs');

const testFileName = '<your file name>';
const testLocation = 'dialonce-uploads/ci';

const manager = fileManagement.create('S3', {
      auth: {
        // AWS creds need to be provided
        AWS_ACCESS_KEY_ID: process.env.AWS_ACCESS_KEY_ID,
        AWS_SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY,
        AWS_REGION: process.env.AWS_REGION,
      },
      // s3 options as needed
      options: {}
    });

 const stream = fs.createReadStream('<path to your file>');
      return manager
      .uploadFile(testLocation, testFileName, stream)
      .then((result) => {
        console.log (result);
      })
      .catch(console.error);

Run cloudfront invalidation

const fileManagement = require('file-management');
const manager = fileManagement.create('S3', {
  auth: {
    // AWS creds need to be provided
    AWS_ACCESS_KEY_ID: process.env.AWS_ACCESS_KEY_ID,
    AWS_SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY,
    AWS_REGION: process.env.AWS_REGION,
  },
  // s3 options as needed
  options: {}
});

const invalidationPaths = ['/css/*', '/img/*']; // ['/*'] by default
const distributionId = '123ABC456EFG' || process.env.CLOUDFRONT_DISTRIBUTION_ID;

manager.invalidate(invalidationPaths, distributionId)
  .then((result) => {
    console.log(result);
  });

Download (Downloads a file from storage)

const fileManagement = require('file-management');
const fs = require('fs');

const testFileName = '<your file name>';
const testLocation = 'dialonce-uploads/ci'; // S3 Bucket

const manager = fileManagement.create('S3', {
      auth: {
        // AWS creds need to be provided
        AWS_ACCESS_KEY_ID: process.env.AWS_ACCESS_KEY_ID,
        AWS_SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY,
        AWS_REGION: process.env.AWS_REGION,
      },
      // s3 options as needed
      options: {}
    });

  const stream = fs.createWriteStream(testFileName);
       return manager
       .downloadFile(testLocation, testFileName, stream)
       .then(() => {
         if (!fs.existsSync(testFileName)) {
           throw new Error('File does not exist');
         } else {
           // all ok, file downloaded, delete it
           fs.unlinkSync(testFileName);
         }
       });

Delete (deletes a file on storage)

const fileManagement = require('file-management');

const testFileName = '<your file name>';
const testLocation = 'dialonce-uploads/ci'; // S3 Bucket

const manager = fileManagement.create('S3', {
      auth: {
        // AWS creds need to be provided
        AWS_ACCESS_KEY_ID: process.env.AWS_ACCESS_KEY_ID,
        AWS_SECRET_ACCESS_KEY: process.env.AWS_SECRET_ACCESS_KEY,
        AWS_REGION: process.env.AWS_REGION,
      },
      // s3 options as needed
      options: {}
    });

  manager
    .deleteFile(testLocation, testFileName)
    .then(() => {
      console.log('File deleted!');
    })
    .catch(console.error);