1. 安装依赖
npm i multer -S npm i @types/multer -D
2. 上传使用
2.1 全局配置
upload.module.ts
import { 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';
@Module({
imports: [
MulterModule.register({
storage: diskStorage({
destination: join(__dirname, '../images'),
filename: (_, file, callback) => {
const fileName = `${
new Date().getTime() + extname(file.originalname)
}`;
return callback(null, fileName);
},
}),
}),
],
controllers: [UploadController],
providers: [UploadService],
})
export class UploadModule {}
重新编译运行,会产生
使用
upload.controller.ts
单个文件
import {
Controller,
Get,
Post,
Body,
Patch,
Param,
Delete,
UploadedFile,
UseInterceptors,
} from '@nestjs/common';
import { UploadService } from './upload.service';
import { CreateUploadDto } from './dto/create-upload.dto';
import { UpdateUploadDto } from './dto/update-upload.dto';
import { FileInterceptor } from '@nestjs/platform-express/multer';
@Controller('upload')
export class UploadController {
constructor(private readonly uploadService: UploadService) {}
@Post('album')
@UseInterceptors(FileInterceptor('file'))
upload(@UploadedFile() file) {
console.log(file);
return true;
}
}
2.2. 单独配置
upload.module.ts
import { Module } from '@nestjs/common';
import { UploadService } from './upload.service';
import { UploadController } from './upload.controller';
import { MulterModule } from '@nestjs/platform-express';
@Module({
imports: [
MulterModule.register(),
],
controllers: [UploadController],
providers: [UploadService],
})
export class UploadModule {}
重新编译运行,会产生
使用
upload.controller.ts
单个文件
import {
Controller,
Get,
Post,
Body,
Patch,
Param,
Delete,
UploadedFile,
UseInterceptors,
} from '@nestjs/common';
import { UploadService } from './upload.service';
import { CreateUploadDto } from './dto/create-upload.dto';
import { UpdateUploadDto } from './dto/update-upload.dto';
import { FileInterceptor } from '@nestjs/platform-express/multer';
import { diskStorage } from 'multer';
import { extname, join } from 'path';
@Controller('upload')
export class UploadController {
constructor(private readonly uploadService: UploadService) {}
@Post('album')
@UseInterceptors(FileInterceptor('file',{
storage: diskStorage({
destination: join(__dirname, '../images'),
filename: (_, file, callback) => {
const fileName = `${
new Date().getTime() + extname(file.originalname)
}`;
return callback(null, fileName);
},
}),
}))
upload(@UploadedFile() file) {
console.log(file);
return true;
}
}
这两处需要对应
3. 配置静态资源访问
这里是nestjs 9.0版本,之前版本可以使用app.useStaticAssets实现。
现在需要安装 npm i --save @nestjs/serve-static
配置如下:
app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { UserModule } from './user/user.module';
import { OrderModule } from './order/order.module';
import { ConfigModule } from './config/config.module';
import { UploadModule } from './upload/upload.module';
import { ServeStaticModule } from '@nestjs/serve-static';
import { join } from 'path';
@Module({
imports: [
ServeStaticModule.forRoot({
rootPath: join(__dirname, 'images'),
serveRoot: '/static', // 需要添加'/' 此处相当于添加前缀
}),
UserModule,
OrderModule,
ConfigModule.forRoot({ path: '/666' }),
UploadModule,
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
就可以进行访问
可以通过配置 serveStaticOptions 进行缓存方式配置 具体配置