Skip to content

Commit eee5dda

Browse files
committed
Added Cloudinary support for storage pipe
1 parent 3c40519 commit eee5dda

8 files changed

Lines changed: 112 additions & 50 deletions

index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
const GCLOUD = require('./lib/GoogleCloudStorageSystem');
22
const NFS = require('./lib/NFSStorageSystem');
33
const AWS3 = require('./lib/S3StorageSystem');
4+
const CLOUDINARY = require('./lib/CloudinaryStorageSystem');
45

56
class StorageFactory {
67
static getInstance(storageMode, Region) {
@@ -16,6 +17,9 @@ class StorageFactory {
1617
else if (storageMode === 'NFS') {
1718
return new NFS();
1819
}
20+
else if (storageMode === 'CLOUDINARY') {
21+
return new CLOUDINARY();
22+
}
1923
else {
2024
throw new Error(`Cant recognize instance of ${storageMode}, Please Specify Instance of AWS, GCLOUD, NFS`);
2125
}

lib/CloudinaryStorageSystem.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
const StorageSystem = require ('./storage-system');
2+
const Cloudinary = require('cloudinary').v2;
3+
4+
5+
class CloudinaryStorageSystem extends StorageSystem {
6+
/**
7+
* @memberof NFSStorage
8+
* @name Upload
9+
* @params filename, destination
10+
* @description Serves as General Upload SDK for NFS Storage
11+
*/
12+
constructor() {
13+
super();
14+
}
15+
16+
async upload(bucketName, filename, fileType) {
17+
try {
18+
await Cloudinary.uploader.upload(filename,
19+
{ resource_type: fileType,
20+
folder: bucketName,
21+
chunk_size: 6000000,
22+
eager: [
23+
{ width: 300, height: 300, crop: "pad", audio_codec: "none" },
24+
{ width: 160, height: 100, crop: "crop", gravity: "south", audio_codec: "none" } ],
25+
eager_async: true,
26+
},
27+
function(error, result) {
28+
return (result)
29+
});
30+
} catch (err) {
31+
return new Error(err);
32+
}
33+
}
34+
35+
36+
}
37+
38+
module.exports = CloudinaryStorageSystem;

lib/GoogleCloudStorageSystem.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class GoogleCloudStorageSystem extends StorageSystem {
2525
return (`${filename} uploaded to ${bucketName}.`);
2626
} catch (err) {
2727
console.log(err);
28-
throw new Error(err);
28+
return new Error(err);
2929
}
3030
}
3131

@@ -44,7 +44,7 @@ class GoogleCloudStorageSystem extends StorageSystem {
4444
.download({destination: destination+filename});
4545
return (`${filename} download to ${destination+filename}.`);
4646
} catch (err) {
47-
throw new Error(err);
47+
return new Error(err);
4848
}
4949
}
5050

@@ -56,15 +56,15 @@ class GoogleCloudStorageSystem extends StorageSystem {
5656
.delete();
5757
return (`gs://${buckName}/${filename} deleted.`);
5858
}catch (err) {
59-
throw new Error(err)
59+
return new Error(err)
6060
}
6161
}
6262

6363
async getBucketMetadata(bucketName){
6464
try {
6565
return await storage.bucket(bucketName).getMetadata();
6666
}catch (err) {
67-
throw new Error(err)
67+
return new Error(err)
6868
}
6969
}
7070

@@ -76,7 +76,7 @@ class GoogleCloudStorageSystem extends StorageSystem {
7676
});
7777
return(`Bucket ${bucket.name} created.`);
7878
}catch (err) {
79-
throw new Error(err)
79+
return new Error(err)
8080
}
8181
}
8282

@@ -85,23 +85,23 @@ class GoogleCloudStorageSystem extends StorageSystem {
8585
await storage.bucket(bucketName).delete();
8686
return(`Bucket ${bucketName} deleted.`);
8787
}catch (err) {
88-
throw new Error(err)
88+
return new Error(err)
8989
}
9090
}
9191

9292
async listBuckets(){
9393
try {
9494
return await storage.getBuckets();
9595
}catch (err) {
96-
throw new Error(err)
96+
return new Error(err)
9797
}
9898
}
9999

100100
async listFiles(bucketName){
101101
try {
102102
return await storage.bucket(bucketName).getFiles();
103103
}catch (err) {
104-
throw new Error(err)
104+
return new Error(err)
105105
}
106106
}
107107
}

lib/NFSStorageSystem.js

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const StorageSystem = require ('./storage-system');
1+
const StorageSystem = require('./storage-system');
22
const fse = require('fs-extra');
33
const fs = require('fs');
44

@@ -19,7 +19,7 @@ class NFSStorageSystem extends StorageSystem {
1919
const finalDest = `${this._nfsMount}${bucketName}/${filename}`;
2020
return fse.copy(destination, finalDest);
2121
} catch (e) {
22-
throw new Error(e);
22+
return new Error(e);
2323
}
2424
}
2525

@@ -31,65 +31,65 @@ class NFSStorageSystem extends StorageSystem {
3131
*/
3232
async download(bucketName, filename, destination) {
3333
try {
34-
return fse.copy(`${this._nfsMount}${bucketName}/${filename}`, destination);
34+
return await fse.copy(`${this._nfsMount}${bucketName}/${filename}`, destination);
3535
} catch (e) {
36-
throw new Error(e);
36+
return new Error(e);
3737
}
3838
}
3939

40-
async createBucket(bucketName){
40+
async createBucket(bucketName) {
4141
try {
42-
if (!fs.existsSync(this._nfsMount+bucketName)){
43-
return fs.mkdirSync(this._nfsMount+bucketName);
44-
}else {
42+
if (!fs.existsSync(this._nfsMount + bucketName)) {
43+
return fs.mkdirSync(this._nfsMount + bucketName);
44+
} else {
4545
return new Error('Bucket Already Exist')
4646
}
47-
}catch (err) {
48-
throw new Error(err)
47+
} catch (err) {
48+
return new Error(err)
4949
}
5050
}
5151

52-
async deleteBucket(bucketName){
52+
async deleteBucket(bucketName) {
5353
try {
54-
if (fs.existsSync(this._nfsMount+bucketName) === true){
55-
return fs.rmdirSync(this._nfsMount+bucketName, { recursive: true });
56-
}else {
54+
if (fs.existsSync(this._nfsMount + bucketName) === true) {
55+
return fs.rmdirSync(this._nfsMount + bucketName, {recursive: true});
56+
} else {
5757
return new Error('Bucket Does Not Exist')
5858
}
59-
}catch (err) {
60-
throw new Error(err)
59+
} catch (err) {
60+
return new Error(err)
6161
}
6262
}
6363

64-
async listFiles(bucketName){
64+
async listFiles(bucketName) {
6565
let files = [];
6666
try {
67-
fs.readdirSync(this._nfsMount+bucketName).forEach(file => {
67+
fs.readdirSync(this._nfsMount + bucketName).forEach(file => {
6868
files.push(file);
6969
});
7070
return files
71-
}catch (err) {
72-
throw new Error(err)
71+
} catch (err) {
72+
return new Error(err)
7373
}
7474
}
7575

76-
async listBuckets(){
76+
async listBuckets() {
7777
let files = [];
7878
try {
7979
fs.readdirSync(this._nfsMount).forEach(file => {
8080
files.push(file);
8181
});
8282
return files
83-
}catch (err) {
84-
throw new Error(err)
83+
} catch (err) {
84+
return new Error(err)
8585
}
8686
}
8787

88-
async deleteFile(buckName, filename){
89-
try{
90-
return fs.unlinkSync(this._nfsMount+buckName+filename)
91-
}catch (err) {
92-
throw new Error(err)
88+
async deleteFile(buckName, filename) {
89+
try {
90+
return fs.unlinkSync(this._nfsMount + buckName + filename)
91+
} catch (err) {
92+
return new Error(err)
9393
}
9494
}
9595

lib/S3StorageSystem.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class S3StorageSystem extends StorageSystem {
1111
}
1212

1313
async deleteBucket(bucketName) {
14-
this.s3.deleteBucket({Bucket: bucketName}, function (err, data) {
14+
await this.s3.deleteBucket({Bucket: bucketName}, function (err, data) {
1515
if (err) {
1616
return err
1717
} else {
@@ -22,7 +22,7 @@ class S3StorageSystem extends StorageSystem {
2222

2323
async listBuckets() {
2424
// Call S3 to list the buckets
25-
this.s3.listBuckets(function (err, data) {
25+
await this.s3.listBuckets(function (err, data) {
2626
if (err) {
2727
return err
2828
} else {
@@ -33,7 +33,7 @@ class S3StorageSystem extends StorageSystem {
3333

3434
async listFiles(bucketName) {
3535
// Call S3 to obtain a list of the objects in the bucket
36-
this.s3.listObjects({Bucket: bucketName}, function (err, data) {
36+
await this.s3.listObjects({Bucket: bucketName}, function (err, data) {
3737
if (err) {
3838
return err
3939
} else {
@@ -44,7 +44,7 @@ class S3StorageSystem extends StorageSystem {
4444

4545
async createBucket(bucketName, ACL) {
4646
// call S3 to create the bucket
47-
this.s3.createBucket({Bucket: bucketName, ACL: ACL}, function (err, data) {
47+
await this.s3.createBucket({Bucket: bucketName, ACL: ACL}, function (err, data) {
4848
if (err) {
4949
return (err);
5050
} else {
@@ -54,10 +54,10 @@ class S3StorageSystem extends StorageSystem {
5454
}
5555

5656
async upload(bucketName, filename, key) {
57-
fs.readFile(filename, (err, data) => {
58-
if (err) throw err;
57+
await fs.readFile(filename, (err, data) => {
58+
if (err) return err;
5959
this.s3.upload({Bucket: bucketName, Key: key, Body: JSON.stringify(data, null, 2)}, function (s3Err, data) {
60-
if (s3Err) throw s3Err;
60+
if (s3Err) return s3Err;
6161
return (`File uploaded successfully at ${data.Location}`)
6262
});
6363
});
@@ -71,15 +71,15 @@ class S3StorageSystem extends StorageSystem {
7171
* @description Serves as General Download SDK for GCLOUD Storage
7272
*/
7373
async download(bucketName, filename, destination) {
74-
this.s3.getObject({Bucket: bucketName, Key: filename}, (err, data) => {
74+
await this.s3.getObject({Bucket: bucketName, Key: filename}, (err, data) => {
7575
if (err) return (err);
7676
fs.writeFileSync(destination, data.Body.toString());
7777
return (`${filename} has been Downloaded!`);
7878
});
7979
}
8080

8181
async deleteFile(buckName, filename) {
82-
this.s3.deleteObject({Bucket: buckName, Key: filename}, function (err, data) {
82+
await this.s3.deleteObject({Bucket: buckName, Key: filename}, function (err, data) {
8383
if (err) return (err.stack); // an error occurred
8484
else return (data); // successful response
8585
});

package-lock.json

Lines changed: 22 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
"@google-cloud/storage": "^4.3.1",
4444
"aws-sdk": "^2.626.0",
4545
"chai": "^4.2.0",
46+
"cloudinary": "^1.19.0",
4647
"fs-extra": "^8.1.0",
4748
"path": "^0.12.7"
4849
},

test/sdk.test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ describe('Simple Storage Test', () => {
66

77
//First stage Unit Test
88
it('should run', () => {
9-
let StorageInstance = storageSystem.getInstance('GCLOUD');
10-
const data = StorageInstance.download('media', 'dev_key.key', '/Users/nitrocode/tmp/');
9+
let StorageInstance = storageSystem.getInstance('CLOUDINARY');
10+
const data = StorageInstance.upload('media', '/Users/nitrocode/tmp/up.png', 'image');
1111
console.log(data);
1212
});
1313

0 commit comments

Comments
 (0)