Nestjs-Storage provides a powerful filesystem abstraction. The Nestjs-Storage integration provides simple drivers for working with local filesystems, Amazon S3, Azure. Even better, it's amazingly simple to switch between these storage options between your local development machine and production server as the API remains the same for each system.
To begin using it, we first install the required dependencies.
npm install @hodfords/nestjs-storage
To activate storage, import the StorageModule
into the root AppModule
and run the forRoot()
static method as shown below:
Azure configuration:
import { Module } from '@nestjs/common';
import { StorageModule } from '@hodfords/nestjs-storage';
@Module({
imports: [
StorageModule.forRoot({
account: {
name: env.AZURE.ACCOUNT_NAME,
key: env.AZURE.ACCOUNT_KEY,
containerName: env.AZURE.CONTAINER_NAME,
expiredIn: env.AZURE.SAS_EXPIRED_IN
},
disk: 'azure'
})
],
})
export class AppModule {}
Aws S3 configuration:
import { Module } from '@nestjs/common';
import { StorageModule } from '@hodfords/nestjs-storage';
@Module({
imports: [
StorageModule.forRoot({
account: {
name: env.AWS.API_KEY,
key: env.AWS.API_SECRET,
containerName: env.AWS.BUCKET,
expiredIn: env.AZURE.SAS_EXPIRED_IN,
region: env.AWS.REGION
},
disk: 's3'
})
],
})
export class AppModule {}
- Azure:
npm install @azure/storage-blob
- Aws S3:
npm install @aws-sdk/client-s3 @aws-sdk/lib-storage @aws-sdk/s3-request-presigner
Inject storage instance into your service or controller and use it as shown below:
import { StorageService } from "@hodfords/nestjs-storage";
@Injectable()
export class AppService implements OnModuleInit {
constructor(private storageService: StorageService) {
}
}
The delete method accepts a single filename
await this.storageService.deleteFile('path/to/file');
This method may throw an exception if the file does not exist. You can ignore this exception by using the deleteIfExists
method.
await this.storageService.deleteIfExists('path/to/file');
This project is licensed under the MIT License