multercf
Version:
NestJS module to parse incoming HTML form data in Firebase CloudFunctions projects
88 lines (63 loc) • 2.55 kB
Markdown
# 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';
({
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';
('files')
export class AppController {
('upload')
(FileInterceptorCF('file')) // 'file' is the field name for the uploaded file
uploadFile(() 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.