2.3.1 • Published 4 months ago

@webundsoehne/nest-fastify-file-upload v2.3.1

Weekly downloads
185
License
ISC
Repository
-
Last release
4 months ago

Port of Nest's file upload and MulterModule for FastifyAdapter

Compatibile with NestJS 7-11 and Fastify 3-5.

Steps:

Application Setup

Install to your project:

npm i @webundsoehne/nest-fastify-file-upload

Configure your NestApplication to use the correct body parser.

Nest 11+ / Fastify 5

Install npm i @fastify/multipart as multipart body parser.

Register fastifyMultipart in your root application after creation:

import { NestFactory } from '@nestjs/core'
import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify'
import { fastifyMultipart } from '@fastify/multipart'

import { AppModule } from './app.module'

async function bootstrap (): Promise<void> {
  const app = await NestFactory.create<NestFastifyApplication>(AppModule, new FastifyAdapter())

  await app.register(fastifyMultipart)

  await app.listen(3000)
}

Nest <= 10 / Fastify 3-4

Register contentParser in your root application after creation:

import { NestFactory } from '@nestjs/core'
import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify'
import { contentParser } from 'fastify-multer'

import { AppModule } from './app.module'

async function bootstrap (): Promise<void> {
  const app = await NestFactory.create<NestFastifyApplication>(AppModule, new FastifyAdapter())

  await app.register(contentParser)

  await app.listen(3000)
}

bootstrap()

File Controller Setup

Use it like the official NestJS package for Express in your controllers:

@Post('upload')
@UseInterceptors(FileInterceptor('file'))
@ApiFileBody('file')
@ApiConsumes('multipart/form-data')
uploadFile (@UploadedFile('file') file: MulterFile): void {
    console.log(file)
}

...

The package will export the missing Express.Multer.* types as Multer*.

more information: https://docs.nestjs.com/techniques/file-upload

@ApiFileBody Decorator

Useful controller decorator that adds file upload functionality in Swagger.

You can specify the file key as parameter, default key is file.

MulterModule

Register the MulterModule e.g. to directly upload to a specified directory.

import { Module } from '@nestjs/common'

import { AppController } from './app.controller'
import {MulterModule} from "../multer.module";

@Module({
  controllers: [AppController],
  imports: [
      MulterModule.register({dest: './uploads'})
  ]
})
export class AppModule { }

more information and options: https://docs.nestjs.com/techniques/file-upload#default-options

Stay in touch