import { CallHandler, ExecutionContext, NestInterceptor } from '@nestjs/common'; import { Reflector } from '@nestjs/core'; import { Observable } from 'rxjs'; import { IFileProcessor } from '../interfaces/file-processor.interface'; import { FileService } from '../services/file.service'; import { FileSignatureValidator } from '../services/file-signature-validator.service'; import { MaliciousFileDetector } from '../services/malicious-file-detector.service'; import { MimeRegistryService } from '../services/mime-registry.service'; /** * 文件上传拦截器(优化版) * 负责创建文件记录、执行钩子、处理器等后置逻辑 */ export declare class FileUploadInterceptor implements NestInterceptor { private readonly reflector; private readonly mimeRegistry; private readonly processors?; private readonly fileService?; private readonly signatureValidator?; private readonly maliciousDetector?; private readonly moduleOptions?; private readonly logger; constructor(reflector: Reflector, mimeRegistry: MimeRegistryService, processors?: Map, fileService?: FileService, signatureValidator?: FileSignatureValidator, maliciousDetector?: MaliciousFileDetector, moduleOptions?: any); intercept(context: ExecutionContext, next: CallHandler): Promise>; /** * 判断是否应该跳过验证 */ private shouldSkipValidation; /** * 验证文件 */ private validateFile; /** * 批量验证文件类型和扩展名 */ private validateFileTypeAndExtension; /** * 判断是否需要执行文件签名验证 */ private shouldPerformSignatureValidation; /** * 验证文件签名 */ private validateFileSignature; /** * 判断是否需要执行恶意文件检测 */ private shouldPerformMaliciousCheck; /** * 检测恶意文件 */ private checkMaliciousFile; /** * 处理文件 */ private processFile; /** * 创建文件实体 */ private createFileEntity; /** * 执行处理器 */ private executeProcessors; /** * 转换为 FileEntity */ private convertToFileEntity; /** * 更新成功状态 */ private updateFileEntityOnSuccess; /** * 清理失败的文件 */ private cleanupOnFailure; /** * 创建上传上下文 */ private createUploadContext; /** * 获取处理器 */ private getProcessor; /** * 生成uploadId */ private generateUploadId; /** * 判断是否应该在处理后删除原文件 */ private shouldDeleteAfterProcess; /** * 将处理器结果保存到 file_metadata 表 * 处理器可以通过返回结果中的 metadata 字段来指定要保存的内容 */ private saveProcessorResultToMetadata; /** * 删除原文件 */ private deleteOriginalFile; }