/** * 上传前文件处理抽象。 * 可在 putObject 前对内容做转换,例如图片压缩、水印、格式转换等,便于后期扩展。 */ /** 传入处理器的文件信息与内容 */ export interface ProcessFileInput { /** 本地绝对路径 */ localPath: string; /** 相对 localDir 的路径 */ relativePath: string; /** 文件内容,处理器可修改后返回 */ buffer: Buffer; } /** 处理器返回结果,将用于 putObject */ export interface ProcessFileResult { /** 处理后的内容(如压缩后的图片) */ buffer: Buffer; /** 可选:覆盖上传时的 Content-Type(如压缩后统一为 image/jpeg) */ contentType?: string; } /** * 上传前文件处理器接口。 * 实现后可在上传前对文件做压缩、转换等,未配置则直接上传原内容。 */ export interface FileProcessor { process(input: ProcessFileInput): Promise; } /** * 默认实现:不做任何处理,直接返回原 buffer。 * 后续可替换为图片压缩等实现。 */ export class NoOpFileProcessor implements FileProcessor { async process(input: ProcessFileInput): Promise { return { buffer: input.buffer }; } }