@aprilnea/nest-file-fastify
Version:
fastify-multipart decorators for Nest.js
121 lines (81 loc) • 3.65 kB
Markdown
> [!NOTE]
> Note: This is a forked version of [Blazity/nest-file-fastify](https://github.com/Blazity/nest-file-fastify).
>
> The original repository has not been updated for more than 3 years, so I have decided to continue maintaining this useful library. I have fixed many bugs and plan to keep improving the project.
>
> If you are looking for an actively maintained @fastify/multipart decorator library for Nest.js, feel free to use this version. I'll be working hard to maintain compatibility with the stock API while adding new features and fixing problems!
---
<div align="left">
<h1> fastify-multipart for Nest.js</h1>
[](https://github.com/aprilnea/nest-file-fastify)
[](https://www.npmjs.com/package/@aprilnea/nest-file-fastify)
[](https://www.npmjs.com/package/@aprilnea/nest-file-fastify)
</div>
This library adds decorators for [Nest.js](https://github.com/nestjs/nest) to support [@fastify/multipart](https://github.com/fastify/fastify-multipart). The API is very similar to the official Nest.js Express file decorators.
## Installation
NPM
```bash
$ npm install @aprilnea/nest-file-fastify @fastify/multipart
```
Yarn
```bash
$ yarn add @aprilnea/nest-file-fastify @fastify/multipart
```
and register multpart plugin in your Nest.js application
```typescript
import fastyfyMultipart from '@fastify/multipart';
...
app.register(fastyfyMultipart);
```
## Docs
### Single file
```typescript
import { FileInterceptor, UploadedFile, MemoryStorageFile } from '@aprilnea/nest-file-fastify';
@Post('upload')
@UseInterceptors(FileInterceptor('file'))
uploadFile(@UploadedFile() file: MemoryStorageFile) {
console.log(file);
}
```
`FileInterceptor` arguments:
- `fieldname`: string - name of the field that holds a file
- `options`: optional object of type [`UploadOptions`](src/multipart/options.ts#L4)
### Array of files
```typescript
import { FilesInterceptor, UploadedFiles, MemoryStorageFile } from '@aprilnea/nest-file-fastify';
@Post('upload')
@UseInterceptors(FilesInterceptor('files'))
uploadFile(@UploadedFiles() files: MemoryStorageFile[]) {
console.log(files);
}
```
`FilesInterceptor` arguments:
- `fieldname`: string - name of the field that holds files
- `maxCount`: optional number - maximum number of files to accept
- `options`: optional object of type [`UploadOptions`](src/multipart/options.ts#L4)
### Multiple files
```typescript
import { FileFieldsInterceptor, UploadedFiles, MemoryStorageFile } from '@aprilnea/nest-file-fastify';
@Post('upload')
@UseInterceptors(FileFieldsInterceptor([
{ name: 'avatar', maxCount: 1 },
{ name: 'background', maxCount: 1 },
]))
uploadFile(@UploadedFiles() files: { avatar?: MemoryStorageFile[], background?: MemoryStorageFile[] }) {
console.log(files);
}
```
`FileFieldsInterceptor` arguments:
- `uploadFields`: object of type [`UploadField`](src/multipart/handlers/file-fields.ts#L10)
- `options`: optional object of type [`UploadOptions`](src/multipart/options.ts#L4)
### Any files
```typescript
import { AnyFilesInterceptor, UploadedFiles, MemoryStorageFile } from '@aprilnea/nest-file-fastify';
@Post('upload')
@UseInterceptors(AnyFilesInterceptor()
uploadFile(@UploadedFiles() files: MemoryStorageFile[]) {
console.log(files);
}
```
`AnyFilesInterceptor` arguments:
- `options`: optional object of type [`UploadOptions`](src/multipart/options.ts#L4)