Tech TutorBangla Web Documentation
Portfolio
HomeHTMLCSSTailwind CSSJavaScriptTypeScriptReactNext.jsNode.jsExpressSocket.IOExpoWordPressPostgreSQLPrismaPostgresNestJSMongoDBDockerTanStackTanStack TableRTK QueryGitGitHub
  • NestJS Documentation21টি অধ্যায়
প্রযুক্তি নির্বাচন
HomeHTMLCSSTailwind CSSJavaScriptTypeScriptReactNext.jsNode.jsExpressSocket.IOExpoWordPressPostgreSQLPrismaPostgresNestJSMongoDBDockerTanStackTanStack TableRTK QueryGitGitHub
  • Introduction
  • Installation
  • Modules
  • Controllers
  • Providers & DI
  • Pipes
  • Guards
  • Interceptors
  • Exception Handling
  • Middleware
  • Database
  • Authentication
  • Config & Env
  • File Upload
  • WebSockets
  • Microservices
  • Swagger
  • Testing
  • Best Practices
  • Project
  • Interview
  1. Docs
  2. NestJS
  3. NestJS File Upload (Multer)
NestJSIntermediate

NestJS File Upload (Multer)

FileInterceptor, single/multiple upload, validation, static serve — বাংলায়।

10টি অংশবাংলা ভাষায়

NestJS-এ file upload multer-ভিত্তিক FileInterceptor / FilesInterceptor decorator দিয়ে সহজে করা যায়।

Single File Upload

src/upload/upload.controller.tstypescript
typescript
import {
  Controller,
  Post,
  UploadedFile,
  UseInterceptors,
} from "@nestjs/common";
import { FileInterceptor } from "@nestjs/platform-express";
import { diskStorage } from "multer";
import { extname } from "node:path";

@Controller("upload")
export class UploadController {
  @Post("avatar")
  @UseInterceptors(
    FileInterceptor("file", {
      storage: diskStorage({
        destination: "./uploads",
        filename: (req, file, cb) => {
          const unique = Date.now() + "-" + Math.round(Math.random() * 1e9);
          cb(null, unique + extname(file.originalname));
        },
      }),
      limits: { fileSize: 5 * 1024 * 1024 }, // 5MB
    }),
  )
  uploadAvatar(
    @UploadedFile() file: Express.Multer.File,
  ) {
    return { message: "Upload সফল", file };
  }
}

Multiple Files

import { FilesInterceptor, FileFieldsInterceptor } from "@nestjs/platform-express";

@Post("gallery")
@UseInterceptors(
  FilesInterceptor("files", 10), // ঘরে 10 files
)
uploadGallery(@UploadedFiles() files: Express.Multer.File[]) {
  return { count: files.length };
}

@Post("profile")
@UseInterceptors(
  FileFieldsInterceptor([
    { name: "avatar", maxCount: 1 },
    { name: "cover", maxCount: 1 },
  ]),
)
uploadProfile(@UploadedFiles() files: { avatar: File[]; cover: File[] }) {
  return files;
}

File Validation

import { BadRequestException } from "@nestjs/common";

const fileFilter = (req: any, file: any, cb: any) => {
  const allowedTypes = ["image/jpeg", "image/png", "image/webp"];

  if (!allowedTypes.includes(file.mimetype)) {
    return cb(new BadRequestException("শুধু image allowed"), false);
  }
  cb(null, true);
};

// Multer options-এ
{
  storage: diskStorage({ ... }),
  fileFilter,
  limits: { fileSize: 5 * 1024 * 1024 },
}

Uploaded Files Serve

main.tstypescript
typescript
import { NestFactory } from "@nestjs/core";
import { AppModule } from "./app.module";
import { join } from "node:path";

async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  // static serve
  app.useStaticAssets(join(process.cwd(), "uploads"));

  await app.listen(3000);
}
bootstrap();
Production

Production-এ local disk-এ না — Cloudinary, S3, বা GCS bucket-এ upload করাই আদর্শ।

শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।
আগেরNestJS ConfigurationপরেরNestJS WebSockets (Gateway)
এই পেজে
Tech Tutor

বাংলায় ওয়েব ডেভেলপমেন্ট ডকুমেন্টেশন শিখুন — ধাপে ধাপে।

Homeসব ডকুমেন্টেশনQuick Startআমার নোটস

© 2026 Tech Tutor. বাংলায় শিখুন, বাংলায় গড়ুন।

mdanamolhasan1998@gmail.com