在NestJS中实现文件上传功能,通常会遵循以下步骤流程。这里提供一个详细的步骤指南,帮助你快速设置文件上传功能。

1. 安装必要的依赖

首先,确保安装了 @nestjs/platform-express(nestjs自带)multer,@types、multermulter是一个流行的Node.js文件上传中间件。

pnpm install @types/multer multer

2.创建upload模板

nest g res upload

3.upload.module中注册 MulterModule

import { BadRequestException, Module } from '@nestjs/common';
import { UploadService } from './upload.service';
import { UploadController } from './upload.controller';
import { MulterModule } from '@nestjs/platform-express';
import { diskStorage } from 'multer';
import { extname, join } from 'path';
import { HttpErrorByCode } from '@nestjs/common/utils/http-error-by-code.util';

@Module({
  imports: [
    //Multer注册
    MulterModule.register({
      storage: diskStorage({
        destination: join(__dirname, '../../images'),
        filename: (req, file, cb) => {
          const filename = `${new Date().getTime() + extname(file.originalname)}`;
          return cb(null, filename);
        },
      }),
      limits: {
        fileSize: 1024 * 1024 * 5,//限制文件大小5M
      },
      fileFilter: (req, file, cb) => {
        if (!file.originalname.match(/\.(jpg|jpeg|png|gif)$/)) {
          return cb(new BadRequestException('仅允许图片文件上传!'), false);
        }
        cb(null, true);
      }
    }),
  ],
  controllers: [UploadController],
  providers: [UploadService],
})
export class UploadModule { }

4.upload.controller控制器实现file文件拦截

import { Controller, Get, Post, Body, Patch, Param, Delete, UseInterceptors, UploadedFile } from '@nestjs/common';
import { UploadService } from './upload.service';
import { CreateUploadDto } from './dto/create-upload.dto';
import { UpdateUploadDto } from './dto/update-upload.dto';
import { FileInterceptor, FilesInterceptor } from '@nestjs/platform-express';

@Controller('upload')
export class UploadController {
  constructor(private readonly uploadService: UploadService) { }

  @Post()
  @UseInterceptors(FileInterceptor('file'))
  uploadImage(@UploadedFile() file) {
    console.log(file)
    return '上传成功'

  }
}

5.mian.ts中实现静态资源服务

app.useStaticAssets(join(__dirname, 'images'), {
    prefix: '/images'
  });//静态资源
最后修改:2025 年 03 月 06 日
如果觉得我的文章对你有用,请随意赞赏