在NestJS中实现文件上传功能,通常会遵循以下步骤流程。这里提供一个详细的步骤指南,帮助你快速设置文件上传功能。
1. 安装必要的依赖
首先,确保安装了 @nestjs/platform-express(nestjs自带)
,multer,@types、multer
。multer
是一个流行的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'
});//静态资源