node_storage_manager
Version:
Node - Storage Pipe Manager allows world-wide storage and retrieval of any amount of data at any time. You can use Google Cloud Storage, AWS S3 Bucket for a range of scenarios including serving website content, storing data for archival and disaster recov
90 lines (79 loc) • 2.71 kB
JavaScript
const StorageSystem = require('./storage-system');
const AWS = require('aws-sdk');
const fs = require('fs');
class S3StorageSystem extends StorageSystem {
constructor(Region) {
super();
this.Region = Region;
AWS.config.update({region: this.Region});
this.s3 = new AWS.S3({apiVersion: '2006-03-01'});
}
async deleteBucket(bucketName) {
await this.s3.deleteBucket({Bucket: bucketName}, function (err, data) {
if (err) {
return err
} else {
return data
}
});
}
async listBuckets() {
// Call S3 to list the buckets
await this.s3.listBuckets(function (err, data) {
if (err) {
return err
} else {
return data.Buckets;
}
});
}
async listFiles(bucketName) {
// Call S3 to obtain a list of the objects in the bucket
await this.s3.listObjects({Bucket: bucketName}, function (err, data) {
if (err) {
return err
} else {
return data
}
});
}
async createBucket(bucketName, ACL) {
// call S3 to create the bucket
await this.s3.createBucket({Bucket: bucketName, ACL: ACL}, function (err, data) {
if (err) {
return (err);
} else {
return (data.Location);
}
});
}
async upload(bucketName, filename, key) {
await fs.readFile(filename, (err, data) => {
if (err) return err;
this.s3.upload({Bucket: bucketName, Key: key, Body: JSON.stringify(data, null, 2)}, function (s3Err, data) {
if (s3Err) return s3Err;
return (`File uploaded successfully at ${data.Location}`)
});
});
}
/**
* @memberof GoogleCloudStorageSystem
* @name Download
* @params filename, destination
* @description Serves as General Download SDK for GCLOUD Storage
*/
async download(bucketName, filename, destination) {
await this.s3.getObject({Bucket: bucketName, Key: filename}, (err, data) => {
if (err) return (err);
fs.writeFileSync(destination, data.Body.toString());
return (`${filename} has been Downloaded!`);
});
}
async deleteFile(buckName, filename) {
await this.s3.deleteObject({Bucket: buckName, Key: filename}, function (err, data) {
if (err) return (err.stack); // an error occurred
else return (data); // successful response
});
}
}
module.exports = S3StorageSystem;