文件上传需要使用 拦截器 UseInterceptors 在'@nestjs/common'包内
拦截器功能参考:https://docs.nestjs.cn/7/interceptors
单文件上传
所需依赖有FileInterceptor,UploadedFile
FileInterceptor 是拦截器负责处理请求接口后的文件 再使用UploadedFile 进行接受
import { UploadedFile, UseInterceptors ,Body } from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
@Post("upload/single")
// "file" 表示 上传文件的键名
@UseInterceptors(FileInterceptor("file"))
upload(@UploadedFile() file, @Body() body) {
//body为form/data中的其他非文件参数
console.log(file, body);
return "上传成功"
}
// 注意!如果当前参数名没有"file"键将自动报错为400
多文件上传
所需依赖有FilesInterceptor,UploadedFiles
基本操作与单文件上传一致 但注意依赖名不同,多文件上传有复数s
import { UploadedFiles, UseInterceptors ,Body } from '@nestjs/common';
import { FilesInterceptor } from '@nestjs/platform-express';
@Post("upload/multiple")
@UseInterceptors(FilesInterceptor("files"))
uploadMultiple(@UploadedFiles() files, @Body() body) {
// files 变成数组,可以传递多个文件
console.log(files, body);
return "上传成功"
}
多文件上传自定义多个键名
所需依赖有FileFieldsInterceptor,UploadedFiles
与上述操作基本不变 仅拦截方法变更,需要传入参数名数组
import { UploadedFiles, UseInterceptors ,Body } from '@nestjs/common';
import { FileFieldsInterceptor } from '@nestjs/platform-express';
@Post("upload/multipleKey")
@UseInterceptors(FileFieldsInterceptor([
//maxCount 为最大接受文件数量,这里为最多接收10个文件
//不传maxCount为无限制
{ name: "files", maxCount:10 },
{ name: "custom" }
]))
uploadMultipleKey(@UploadedFiles() files, @Body() body) {
// 这里files 将被改为对象 {files:[File],custom:[File]}
console.log(files, body);
return "上传成功"
}