Mid #upload#multer#fileinterceptor#pipe
Upload file trong NestJS với FileInterceptor và ParseFilePipe
⚡ Trả lời nhanh
FileInterceptor bọc multer: @UseInterceptors(FileInterceptor('file')) rồi lấy @UploadedFile(). Dùng ParseFilePipe với MaxFileSizeValidator và FileTypeValidator để kiểm tra, đặt limits trong options của multer, và dùng stream/S3 cho file lớn thay vì giữ trong memory.
@Post('avatar')
@UseInterceptors(FileInterceptor('file', {
storage: diskStorage({ destination: './uploads' }),
limits: { fileSize: 2 * 1024 * 1024 },
}))
upload(
@UploadedFile(new ParseFilePipe({
validators: [
new MaxFileSizeValidator({ maxSize: 2 * 1024 * 1024 }),
new FileTypeValidator({ fileType: /image\/(png|jpeg)/ }),
],
}))
file: Express.Multer.File,
) {
return { name: file.filename, size: file.size };
}
| Interceptor | Dùng khi |
|---|---|
FileInterceptor | Một file, một field |
FilesInterceptor | Nhiều file cùng field |
FileFieldsInterceptor | Nhiều field khác nhau |
AnyFilesInterceptor | Bất kỳ field (cẩn thận) |