diff --git a/packages/core/lib/storage/drivers/local.ts b/packages/core/lib/storage/drivers/local.ts index 163c506..7bb7daa 100644 --- a/packages/core/lib/storage/drivers/local.ts +++ b/packages/core/lib/storage/drivers/local.ts @@ -122,7 +122,7 @@ export class Local implements StorageDriver { return false; } - getStream(filePath: string): ReadStream { + getAsStream(filePath: string): ReadStream { return createReadStream(join(this.config.basePath || '', filePath)); } diff --git a/packages/core/lib/storage/drivers/s3Storage.ts b/packages/core/lib/storage/drivers/s3Storage.ts index 76a39f5..bf5012a 100644 --- a/packages/core/lib/storage/drivers/s3Storage.ts +++ b/packages/core/lib/storage/drivers/s3Storage.ts @@ -28,8 +28,25 @@ export class S3Storage implements StorageDriver { this.initialiseModules(); } - getStream(filePath: string): ReadStream { - throw new Error('Method not implemented.'); + getAsStream(filePath: string): ReadStream { + this.initialiseModules(); + + try { + const command = new this.AWS.GetObjectCommand({ + Bucket: this.config.bucket, + Key: this.getPath(filePath), + }); + + const response = this.client.send(command); + return response.Body as ReadStream; + } catch (error) { + if (this.shouldThrowError()) { + throw new CannotPerformFileOpException( + `Cannot get stream for file ${filePath}: ${error['message']}`, + ); + } + return null; + } } listDir(path: string): Promise> { diff --git a/packages/core/lib/storage/interfaces/storageDriver.ts b/packages/core/lib/storage/interfaces/storageDriver.ts index 263132d..5124623 100644 --- a/packages/core/lib/storage/interfaces/storageDriver.ts +++ b/packages/core/lib/storage/interfaces/storageDriver.ts @@ -1,3 +1,4 @@ +import { ReadStream } from 'fs-extra'; import { StorageDriver$GetFileResponse, StorageDriver$FileMetadataResponse, @@ -136,6 +137,11 @@ export interface StorageDriver { */ getAsJson(path: string, throwError: boolean): Promise>; + /** + * Read file as stream + */ + getAsStream(path: string): ReadStream; + temporaryUrl( path: string, ttlInMins: number, diff --git a/packages/core/package.json b/packages/core/package.json index 988ccfc..b6ac472 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@intentjs/core", - "version": "0.1.60", + "version": "0.1.61", "description": "Core module for Intent", "repository": { "type": "git",