/** * Downloader - 文件下载器 * 支持简单下载、分片下载、断点续传、CRC64 校验 * 浏览器环境适配版本 */ import { Configuration } from '../configuration'; import type { AxiosInstance } from 'axios'; import { SMHError } from '../utils/ErrorHandler'; import { CommonLoader } from './CommonLoader'; import { TaskStatus, DownloadCheckpoint, DownloadOptions, UrlDownloadOptions } from './types'; /** * 远端文件信息接口 */ export interface IRemoteFile { name: string; size?: number; path: string; type?: string; } /** * Downloader - 文件下载器 * 支持简单下载、分片下载、断点续传 */ export declare class Downloader extends CommonLoader { /** * 通过浏览器 URL 方式下载文件(推荐用于 Web 端) * 获取 cosUrl 后通过 标签触发浏览器原生下载, * 不会将文件内容加载到内存中,适合任意大小的文件。 * * @param options - URL 下载选项 * @param configuration - SDK 配置 * */ static downloadByUrl(options: UrlDownloadOptions, configuration: Configuration, axiosInstance?: AxiosInstance): Promise; private options; private fileApi; private readonly MULTIPART_THRESHOLD; private chunk_size; private part_info_list; private is_multipart; private download_url?; private remote_crc64?; private local_crc64; private resultBlob?; private readonly DEFAULT_PARALLEL; constructor(file: IRemoteFile, options: DownloadOptions, configuration: Configuration, axiosInstance?: AxiosInstance); protected getTaskType(): string; /** * 恢复 checkpoint */ private restoreCheckpoint; /** * 获取 checkpoint 信息 */ getCheckpoint(): DownloadCheckpoint; /** * 开始下载 * @returns 下载完成后返回 Blob */ start(): Promise; /** * 开始下载并返回结果 * @returns 下载完成后返回 Blob */ startAndGetBlob(): Promise; /** * 执行开始 */ private doStart; /** * 执行开始并返回结果 */ private doStartAndGetBlob; /** * 暂停下载 */ pause(): Promise; /** * 取消下载 */ cancel(): Promise; /** * 获取下载结果 */ getResult(): Blob | undefined; /** * 主运行流程 */ private run; /** * 检查是否被停止 */ private throwIfStopped; /** * 获取下载 URL */ private getDownloadUrl; /** * 初始化分片列表 */ private initChunks; /** * 带重试的简单下载 */ private simpleDownloadWithRetry; /** * 简单下载 */ private simpleDownload; /** * 分片下载 */ private multipartDownload; /** * 完成下载,验证并返回结果 */ private finalizeDownload; /** * 合并分片 CRC64 */ private combinePartCrc64; /** * 改变状态 */ protected changeState(state: TaskStatus, error?: SMHError): Promise; /** * 通知进度 */ protected notifyProgress(state: string, progress: number): void; /** * 通知分片完成 */ private notifyPartCompleted; /** * 处理错误 */ protected handleError(e: Error): Promise; }