UNPKG

multercf

Version:

NestJS module to parse incoming HTML form data in Firebase CloudFunctions projects

88 lines (63 loc) 2.55 kB
# MulterCF for NestJS A NestJS module to handle `multipart/form-data` (file uploads) in environments like Firebase Cloud Functions where the raw request body is needed for other webhooks or handlers. This module uses `multer` internally but is designed to work around the issue where `express.json()` or other body parsers can conflict with `multer`. It provides a custom interceptor that processes the form data directly from the request stream. ## Features - Seamless integration with NestJS. - Handles file uploads in serverless environments (Firebase Cloud Functions, etc.). - Avoids conflicts with global body parsers. - Provides a `FileInterceptorCF` similar to the standard `FileInterceptor`. ## Installation ```bash npm install multercf ``` ## Usage Follow these steps to integrate `MulterCF` into your NestJS application. ### 1. Import `MultercfModule` First, import the `MultercfModule` into your feature module or root `AppModule`. ```typescript // src/app.module.ts import { Module } from '@nestjs/common'; import { MultercfModule } from 'multercf'; import { AppController } from './app.controller'; @Module({ imports: [ MultercfModule, // Import the module ], controllers: [AppController], }) export class AppModule {} ``` ### 2. Use the `FileInterceptorCF` Use the `FileInterceptorCF` in your controller to handle a file upload. It works similarly to NestJS's built-in `FileInterceptor`. The first argument to the interceptor is the `fieldName` that corresponds to the file input in your HTML form. ```typescript // src/app.controller.ts import { Controller, Post, UploadedFile, UseInterceptors } from '@nestjs/common'; import { FileInterceptorCF } from 'multercf'; import { Express } from 'express'; @Controller('files') export class AppController { @Post('upload') @UseInterceptors(FileInterceptorCF('file')) // 'file' is the field name for the uploaded file uploadFile(@UploadedFile() file: Express.Multer.File) { console.log(file); // Your logic here to handle the file // e.g., save to Google Cloud Storage, etc. return { message: 'File uploaded successfully!', fileName: file.originalname, size: file.size, }; } } ``` ### 3. Client-Side Example Here is a basic HTML form to test the endpoint: ```html <form action="http://localhost:3000/files/upload" method="post" enctype="multipart/form-data"> <input type="file" name="file" /> <button type="submit">Upload</button> </form> ``` ## License This project is licensed under the ISC License.