</>
⌕
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 };
}
InterceptorDùng khi
FileInterceptorMột file, một field
FilesInterceptorNhiều file cùng field
FileFieldsInterceptorNhiều field khác nhau
AnyFilesInterceptorBất kỳ field (cẩn thận)
🃏 Ôn bằng flashcard