推荐答案
在 Nest.js 中,@UploadedFile 和 @UploadedFiles 装饰器用于处理文件上传。它们通常与 @Post 装饰器一起使用,以便在控制器中处理文件上传请求。
使用 @UploadedFile 装饰器
@UploadedFile 装饰器用于处理单个文件上传。以下是一个示例:
// www.javascriptcn.com code example
import { Controller, Post, UploadedFile, UseInterceptors } from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
@Controller('upload')
export class UploadController {
@Post('single')
@UseInterceptors(FileInterceptor('file'))
uploadSingleFile(@UploadedFile() file: Express.Multer.File) {
console.log(file);
return 'File uploaded successfully!';
}
}在这个示例中,FileInterceptor 用于拦截文件上传请求,并将文件存储在 file 参数中。@UploadedFile 装饰器将文件对象注入到 file 参数中。
使用 @UploadedFiles 装饰器
@UploadedFiles 装饰器用于处理多个文件上传。以下是一个示例:
// www.javascriptcn.com code example
import { Controller, Post, UploadedFiles, UseInterceptors } from '@nestjs/common';
import { FilesInterceptor } from '@nestjs/platform-express';
@Controller('upload')
export class UploadController {
@Post('multiple')
@UseInterceptors(FilesInterceptor('files'))
uploadMultipleFiles(@UploadedFiles() files: Array<Express.Multer.File>) {
console.log(files);
return 'Files uploaded successfully!';
}
}在这个示例中,FilesInterceptor 用于拦截多个文件上传请求,并将文件存储在 files 参数中。@UploadedFiles 装饰器将文件数组注入到 files 参数中。
本题详细解读
@UploadedFile 和 @UploadedFiles 的作用
@UploadedFile 和 @UploadedFiles 是 Nest.js 提供的装饰器,用于处理文件上传。它们分别用于处理单个文件和多个文件的上传请求。
FileInterceptor 和 FilesInterceptor 的作用
FileInterceptor 和 FilesInterceptor 是 Nest.js 提供的拦截器,用于拦截文件上传请求。FileInterceptor 用于处理单个文件上传,而 FilesInterceptor 用于处理多个文件上传。
文件对象的类型
@UploadedFile 和 @UploadedFiles 装饰器注入的文件对象的类型是 Express.Multer.File。这个对象包含了文件的各种信息,如文件名、文件大小、文件类型等。
文件上传的配置
在实际应用中,你可能需要对文件上传进行一些配置,如限制文件大小、限制文件类型等。这些配置可以通过 multer 库来实现。你可以在 FileInterceptor 或 FilesInterceptor 中传递配置对象来进行配置。
// www.javascriptcn.com code example
@UseInterceptors(FileInterceptor('file', {
limits: { fileSize: 1024 * 1024 }, // 限制文件大小为 1MB
fileFilter: (req, file, callback) => {
if (file.mimetype === 'image/jpeg') {
callback(null, true);
} else {
callback(new Error('Only JPEG files are allowed!'), false);
}
}
}))通过这种方式,你可以灵活地控制文件上传的行为。