From 0733703965e123c4a0136cee3b1836d82da74993 Mon Sep 17 00:00:00 2001 From: praveenKDass Date: Fri, 16 Feb 2024 15:38:26 +0530 Subject: [PATCH 1/5] cloud api services --- src/AWSStorageService.js | 36 ++++++++++++++++++++++++++++++++++-- src/AzureStorageService.js | 31 +++++++++++++++++++++++++++++-- 2 files changed, 63 insertions(+), 4 deletions(-) diff --git a/src/AWSStorageService.js b/src/AWSStorageService.js index 6a21dc0..bc5d3ee 100644 --- a/src/AWSStorageService.js +++ b/src/AWSStorageService.js @@ -352,9 +352,41 @@ export class AWSStorageService extends BaseStorageService { 'result': result } } - upload(container, fileName, filePath, callback) { - throw new Error('BaseStorageService :: upload() must be implemented'); + /** + * @upload + * @param { string } container - Container or bucket name + * @param { string } fileName - FolderPath/fileName + * @param {Array} file - Array of BinaryValue of file + * @return { Object } - Object with Path and DownloadUrl + */ + + async upload(container, fileName, file) { + let keyPath = container + "/" + fileName + try{ + + const uploadToTheCloud = new Upload({ + client: this.client, + params: { Bucket: container, Key: keyPath, Body: file}, + leavePartsOnError: false, + }); + + await uploadToTheCloud.done(); + + const getDownloadableUrl = await this.getDownloadableUrl( + container, + keyPath + ); + + let response = { + path: fileName, + downloadUrl: getDownloadableUrl, + }; + + return Promise.resolve(response); + }catch(error){ + return Promise.reject(error) } + } /** * @description - Generates a signed URL for performing specified operations on a file in the AWS bucket. diff --git a/src/AzureStorageService.js b/src/AzureStorageService.js index d447b29..addb1ad 100644 --- a/src/AzureStorageService.js +++ b/src/AzureStorageService.js @@ -369,8 +369,35 @@ export class AzureStorageService extends BaseStorageService { } } - upload(container, fileName, filePath, callback) { - throw new Error('AzureStorageService :: upload() must be implemented'); + /** + * @upload + * @param { string } container - Container or bucket name + * @param { string } fileName - FolderPath/fileName + * @param {Array} file - Array of BinaryValue of file + * @return { Object } - Object with Path and DownloadUrl + */ + + async upload(container, fileName, file) { + const blobClient = this.blobService.getContainerClient(container).getBlockBlobClient(fileName); + try{ + await blobClient.upload( + file, + file.length, + ); + const getDownloadableUrl = await this.getDownloadableUrl(container,fileName) + + let response ={ + path:fileName, + downloadUrl: getDownloadableUrl, + } + + return Promise.resolve(response) + }catch(err){ + return Promise.reject(err); + } + + + ; } /** From 96f68f71a294f7058fafe0e5e1f653f9f4e88b00 Mon Sep 17 00:00:00 2001 From: praveenKDass Date: Wed, 21 Feb 2024 17:10:27 +0530 Subject: [PATCH 2/5] file Upload for aws,azure and gcp --- src/AWSStorageService.js | 57 +++++++++++++++++++------------------- src/AzureStorageService.js | 43 +++++++++++++--------------- src/GCPStorageService.js | 25 +++++++++++++++-- 3 files changed, 70 insertions(+), 55 deletions(-) diff --git a/src/AWSStorageService.js b/src/AWSStorageService.js index bc5d3ee..584cdcd 100644 --- a/src/AWSStorageService.js +++ b/src/AWSStorageService.js @@ -352,40 +352,39 @@ export class AWSStorageService extends BaseStorageService { 'result': result } } + /** - * @upload - * @param { string } container - Container or bucket name - * @param { string } fileName - FolderPath/fileName - * @param {Array} file - Array of BinaryValue of file - * @return { Object } - Object with Path and DownloadUrl + * @upload + * @description - Uplaod file directly to AWS storage + * @param { string } container - bucket name + * @param { string } fileName - Path to the file in the bucket. + * @param { Buffer } fileContent - file data which needs to uploaded + * @return { Promise } - A signed URL for the specified operation on the file. */ - async upload(container, fileName, file) { - let keyPath = container + "/" + fileName - try{ - - const uploadToTheCloud = new Upload({ - client: this.client, - params: { Bucket: container, Key: keyPath, Body: file}, - leavePartsOnError: false, - }); - - await uploadToTheCloud.done(); - - const getDownloadableUrl = await this.getDownloadableUrl( - container, - keyPath - ); + async upload(container, fileName, fileContent) { + return new Promise((resolve, reject) => { - let response = { - path: fileName, - downloadUrl: getDownloadableUrl, - }; + let params = { + Bucket: container, + Key: fileName, + Body: fileContent, + }; + + const fileUpload = new Upload({ + client: this.client, + params: params, + leavePartsOnError: false, + }); - return Promise.resolve(response); - }catch(error){ - return Promise.reject(error) - } + fileUpload.done() + .then((data) => { + resolve(data.Location); + }) + .catch((error) => { + reject(error); + }); + }); } /** diff --git a/src/AzureStorageService.js b/src/AzureStorageService.js index addb1ad..5b973c0 100644 --- a/src/AzureStorageService.js +++ b/src/AzureStorageService.js @@ -370,34 +370,29 @@ export class AzureStorageService extends BaseStorageService { } /** + + * @description - Uplaod file directly to azure storage * @upload - * @param { string } container - Container or bucket name - * @param { string } fileName - FolderPath/fileName - * @param {Array} file - Array of BinaryValue of file - * @return { Object } - Object with Path and DownloadUrl + * @param { string } container - bucket name + * @param { string } fileName - Path to the file in the bucket. + * @param { Buffer } fileContent - file data which needs to uploaded + * @return { Promise} } - Response Status code */ - async upload(container, fileName, file) { - const blobClient = this.blobService.getContainerClient(container).getBlockBlobClient(fileName); - try{ - await blobClient.upload( - file, - file.length, - ); - const getDownloadableUrl = await this.getDownloadableUrl(container,fileName) - - let response ={ - path:fileName, - downloadUrl: getDownloadableUrl, - } - - return Promise.resolve(response) - }catch(err){ - return Promise.reject(err); - } - + async upload(container, fileName, fileContent) { + return new Promise(async (resolve, reject) => { + let blobClient = this.blobService.getContainerClient(container).getBlockBlobClient(fileName); + try{ + let fileUpload= await blobClient.upload( + fileContent, + fileContent.length, + ); + resolve(fileUpload._response.status) + }catch(err){ + reject(err); + } + }) - ; } /** diff --git a/src/GCPStorageService.js b/src/GCPStorageService.js index 31389ca..fc9d8d6 100644 --- a/src/GCPStorageService.js +++ b/src/GCPStorageService.js @@ -269,8 +269,29 @@ export class GCPStorageService extends BaseStorageService { 'result': result } } - upload(container, fileName, filePath, callback) { - throw new Error('BaseStorageService :: upload() must be implemented'); + + /** + * @upload + * @description - Uplaod file directly to GCP storage + * @param { string } container - bucket name + * @param { string } fileName - Path to the file in the bucket. + * @param { Buffer } fileContent - file data which needs to uploaded + * @return { Promise} } - Response Success message. + */ + async upload(container, fileName, fileContent) { + return new Promise((resolve, reject) => { + const fileCloud = this._storage.bucket(container).file(fileName); + fileCloud.save(fileContent, { + contentType: "application/octet-stream" + }, (err) => { + if (err) { + reject("error",err); + } + else { + resolve(`File saved successfully`); + } + }); + }) } /** From 5d3d65f5309e2762ac594b09f5d27f796829cea9 Mon Sep 17 00:00:00 2001 From: praveenKDass Date: Wed, 21 Feb 2024 17:20:20 +0530 Subject: [PATCH 3/5] variable name change in GCp --- src/GCPStorageService.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/GCPStorageService.js b/src/GCPStorageService.js index fc9d8d6..3f477b5 100644 --- a/src/GCPStorageService.js +++ b/src/GCPStorageService.js @@ -280,8 +280,8 @@ export class GCPStorageService extends BaseStorageService { */ async upload(container, fileName, fileContent) { return new Promise((resolve, reject) => { - const fileCloud = this._storage.bucket(container).file(fileName); - fileCloud.save(fileContent, { + const fileUpload = this._storage.bucket(container).file(fileName); + fileUpload.save(fileContent, { contentType: "application/octet-stream" }, (err) => { if (err) { From 5c2bd284b05df7179b7455dcd58261f783db525c Mon Sep 17 00:00:00 2001 From: praveenKDass Date: Wed, 21 Feb 2024 17:20:38 +0530 Subject: [PATCH 4/5] variable name change in GCp --- src/GCPStorageService.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/GCPStorageService.js b/src/GCPStorageService.js index 3f477b5..64adc2d 100644 --- a/src/GCPStorageService.js +++ b/src/GCPStorageService.js @@ -280,7 +280,9 @@ export class GCPStorageService extends BaseStorageService { */ async upload(container, fileName, fileContent) { return new Promise((resolve, reject) => { + const fileUpload = this._storage.bucket(container).file(fileName); + fileUpload.save(fileContent, { contentType: "application/octet-stream" }, (err) => { From 27f3d2d16b1860eb9e602a63fe149a0635300142 Mon Sep 17 00:00:00 2001 From: praveenKDass Date: Wed, 21 Feb 2024 17:44:32 +0530 Subject: [PATCH 5/5] Handled file Upload for OCI --- src/OCIStorageService.js | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/src/OCIStorageService.js b/src/OCIStorageService.js index 13ebddf..9eee9c6 100644 --- a/src/OCIStorageService.js +++ b/src/OCIStorageService.js @@ -363,9 +363,41 @@ export class OCIStorageService extends BaseStorageService { 'result': result } } - upload(container, fileName, filePath, callback) { - throw new Error('OCIStorageService :: upload() must be implemented'); - } + + /** + * @upload + * @description - Uplaod file directly to OCI storage + * @param { string } container - bucket name + * @param { string } fileName - Path to the file in the bucket. + * @param { Buffer } fileContent - file data which needs to uploaded + * @return { Promise } - A signed URL for the specified operation on the file. + */ + + upload(container, fileName, fileContent, ) { + + return new Promise((resolve, reject) => { + + let params = { + Bucket: container, + Key: fileName, + Body: fileContent, + }; + + const fileUpload = new Upload({ + client: this.client, + params: params, + leavePartsOnError: false, + }); + + fileUpload.done() + .then((data) => { + resolve(data.Location); + }) + .catch((error) => { + reject(error); + }); + }); + } /** * @description - Generates a signed URL for performing specified operations on a file in the OCI bucket.