Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nestjs/azure-storage
Azure Storage module for Nest framework (node.js) ☁️
https://github.com/nestjs/azure-storage
azure azure-storage cloud javascript nest nestjs nodejs storage typescript
Last synced: 5 days ago
JSON representation
Azure Storage module for Nest framework (node.js) ☁️
- Host: GitHub
- URL: https://github.com/nestjs/azure-storage
- Owner: nestjs
- License: mit
- Created: 2019-06-19T10:17:25.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2024-10-28T22:59:29.000Z (3 months ago)
- Last Synced: 2024-10-29T14:58:29.845Z (3 months ago)
- Topics: azure, azure-storage, cloud, javascript, nest, nestjs, nodejs, storage, typescript
- Language: TypeScript
- Homepage: https://nestjs.com
- Size: 854 KB
- Stars: 87
- Watchers: 5
- Forks: 35
- Open Issues: 32
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
[travis-image]: https://api.travis-ci.org/nestjs/nest.svg?branch=master
[travis-url]: https://travis-ci.org/nestjs/nest
[linux-image]: https://img.shields.io/travis/nestjs/nest/master.svg?label=linux
[linux-url]: https://travis-ci.org/nestjs/nest
A progressive Node.js framework for building efficient and scalable server-side applications.
## Description
[Azure Storage](http://bit.ly/nest_azure-storage-blob) module for [Nest](https://github.com/nestjs/nest) framework (node.js)
## Tutorial
Learn how to get started with [Azure table storage for NestJS](https://trilon.io/blog/nestjs-nosql-azure-table-storage)
## Before Installation
1. Create a Storage account and resource ([read more](http://bit.ly/nest_new-azure-storage-account))
1. In the [Azure Portal](https://portal.azure.com), go to **Dashboard > Storage > _your-storage-account_**.
2. Note down the "AccountName", "AccountKey" obtained at **Access keys** and "AccountSAS" from **Shared access signature** under **Settings** tab.## (Recommended) Installation and automatic configuration
Using the Nest CLI:
```bash
$ nest add @nestjs/azure-storage
```## Additional options
You can pass additional flags to customize the post-install schematic. For example, if your base application directory is different than `src`, use `--rootDir` flag:
```bash
$ nest add @nestjs/azure-storage --rootDir app
```When requested, provide the `storageAccountName` and `storageAccountSAS` (see below).
Other available flags:
- `rootDir` - Application root directory, default: `src`
- `rootModuleFileName` - the name of the root module file, default: `app.module`
- `rootModuleClassName` - the name of the root module class, default: `AppModule`
- `mainFileName` - Application main file, default: `main`
- `skipInstall` - skip installing dependencies, default: `false`
- `storageAccountName` (required) - The Azure Storage account name (see: http://bit.ly/azure-storage-account)
- `storageAccountSAS` (required) - The Azure Storage SAS Key (see: http://bit.ly/azure-storage-sas-key).## (Option 2) Manual configuration
1. Install the package using NPM:
```bash
$ npm i -S @nestjs/azure-storage
```2. Create or update your existing `.env` file with the following content:
```bash
# See: http://bit.ly/azure-storage-sas-key
AZURE_STORAGE_SAS_KEY=
# See: http://bit.ly/azure-storage-account
AZURE_STORAGE_ACCOUNT=
```> The SAS has the following format: `?sv=2018-03-28&ss=bfqt&srt=sco&sp=rwdlacup&se=2019-12-31T22:54:03Z&st=2019-07-11T13:54:03Z&spr=https,http&sig=WmAl%236251oj11biPK2xcpLs254152H9s0%3D`
3. **IMPORTANT: Make sure to add your `.env` file to your `.gitignore`! The `.env` file MUST NOT be versionned on Git.**
4. Make sure to include the following call to your main file:
```typescript
if (process.env.NODE_ENV !== 'production') require('dotenv').config();
```> This line must be added before any other imports!
5. Import the `AzureStorageModule` with the following configuration:
```typescript
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { AzureStorageModule } from '@nestjs/azure-storage';@Module({
controllers: [AppController],
providers: [AppService],
imports: [
AzureStorageModule.withConfig({
sasKey: process.env['AZURE_STORAGE_SAS_KEY'],
accountName: process.env['AZURE_STORAGE_ACCOUNT'],
containerName: 'nest-demo-container',
}),
],
})
export class AppModule {}
```If you want to use asynchronous configuration options using factory or class,
```typescript
const storageConfigFactory = async () => {
sasKey: process.env['AZURE_STORAGE_SAS_KEY'],
accountName: process.env['AZURE_STORAGE_ACCOUNT'],
containerName: 'nest-demo-container',
};@Module({
controllers: [AppController],
providers: [AppService],
imports: [
AzureStorageModule.withConfigAsync({
useFactory: storageConfigFactory,
}),
],
})
export class AppModule {}
```> You may provide a default `containerName` name for the whole module, this will apply to all controllers withing this module. You can also provide (override) the `containerName` in the controller, for each route.
## Story examples
### Store a file using the default container name
```typescript
import {
Controller,
Logger,
Post,
UploadedFile,
UseInterceptors,
} from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
import {
AzureStorageFileInterceptor,
UploadedFileMetadata,
} from '@nestjs/azure-storage';@Controller()
export class AppController {
@Post('azure/upload')
@UseInterceptors(
AzureStorageFileInterceptor('file'),
)
UploadedFilesUsingInterceptor(
@UploadedFile()
file: UploadedFileMetadata,
) {
Logger.log(`Storage URL: ${file.storageUrl}`, 'AppController');
}
}
```### Store a file using a specific container name
```typescript
import {
Controller,
Logger,
Post,
UploadedFile,
UseInterceptors,
} from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
import {
AzureStorageFileInterceptor,
UploadedFileMetadata,
} from '@nestjs/azure-storage';@Controller()
export class AppController {
@Post('azure/upload')
@UseInterceptors(
AzureStorageFileInterceptor('file', null, {
containerName: 'nest-demo-container-interceptor',
}),
)
UploadedFilesUsingInterceptor(
@UploadedFile()
file: UploadedFileMetadata,
) {
Logger.log(`Storage URL: ${file.storageUrl}`, 'AppController');
}
}
```### Store a file using a custom file name
```typescript
import {
Controller,
Logger,
Post,
UploadedFile,
UseInterceptors,
} from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
import {
AzureStorageFileInterceptor,
AzureStorageService,
UploadedFileMetadata,
} from '@nestjs/azure-storage';@Controller()
export class AppController {
constructor(private readonly azureStorage: AzureStorageService) {}
@Post('azure/upload')
@UseInterceptors(FileInterceptor('file'))
async UploadedFilesUsingService(
@UploadedFile()
file: UploadedFileMetadata,
) {
file = {
...file,
originalname: 'foo-bar.txt',
};
const storageUrl = await this.azureStorage.upload(file);
Logger.log(`Storage URL: ${storageUrl}`, 'AppController');
}
}
```## Support
Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support).
## Stay in touch
* Author - [Wassim Chegham](https://wassim.dev)
* Website - [https://wassim.dev](https://wassim.dev/)
* Twitter - [@manekinekko](https://twitter.com/manekinekko)## License
Nest is [MIT licensed](LICENSE).