123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- import { QiniuError } from '../errors';
- import Logger, { LogLevel } from '../logger';
- import { region } from '../config';
- import * as utils from '../utils';
- import { Host, HostPool } from './hosts';
- export declare const DEFAULT_CHUNK_SIZE = 4;
- export declare const FREEZE_CODE_LIST: number[];
- export declare const RETRY_CODE_LIST: number[];
- /** 上传文件的资源信息配置 */
- export interface Extra {
- /** 文件原文件名 */
- fname: string;
- /** 用来放置自定义变量 */
- customVars?: {
- [key: string]: string;
- };
- /** 自定义元信息 */
- metadata?: {
- [key: string]: string;
- };
- /** 文件类型设置 */
- mimeType?: string;
- }
- export interface InternalConfig {
- /** 是否开启 cdn 加速 */
- useCdnDomain: boolean;
- /** 是否开启服务端校验 */
- checkByServer: boolean;
- /** 是否对分片进行 md5校验 */
- checkByMD5: boolean;
- /** 强制直传 */
- forceDirect: boolean;
- /** 上传失败后重试次数 */
- retryCount: number;
- /** 自定义上传域名 */
- uphost: string[];
- /** 自定义分片上传并发请求量 */
- concurrentRequestLimit: number;
- /** 分片大小,单位为 MB */
- chunkSize: number;
- /** 上传域名协议 */
- upprotocol: 'https' | 'http';
- /** 上传区域 */
- region?: typeof region[keyof typeof region];
- /** 是否禁止统计日志上报 */
- disableStatisticsReport: boolean;
- /** 设置调试日志输出模式,默认 `OFF`,不输出任何日志 */
- debugLogLevel?: LogLevel;
- }
- /** 上传任务的配置信息 */
- export interface Config extends Partial<Omit<InternalConfig, 'upprotocol' | 'uphost'>> {
- /** 上传域名协议 */
- upprotocol?: InternalConfig['upprotocol'] | 'https:' | 'http:';
- /** 自定义上传域名 */
- uphost?: InternalConfig['uphost'] | string;
- }
- export interface UploadOptions {
- file: File;
- key: string | null | undefined;
- token: string;
- config: InternalConfig;
- putExtra?: Partial<Extra>;
- }
- export interface UploadInfo {
- id: string;
- url: string;
- }
- /** 传递给外部的上传进度信息 */
- export interface UploadProgress {
- total: ProgressCompose;
- uploadInfo?: UploadInfo;
- chunks?: ProgressCompose[];
- }
- export interface UploadHandlers {
- onData: (data: UploadProgress) => void;
- onError: (err: QiniuError) => void;
- onComplete: (res: any) => void;
- }
- export interface Progress {
- total: number;
- loaded: number;
- }
- export interface ProgressCompose {
- size: number;
- loaded: number;
- percent: number;
- fromCache?: boolean;
- }
- export declare type XHRHandler = (xhr: XMLHttpRequest) => void;
- export default abstract class Base {
- protected hostPool: HostPool;
- protected logger: Logger;
- protected config: InternalConfig;
- protected putExtra: Extra;
- protected aborted: boolean;
- protected retryCount: number;
- protected uploadHost?: Host;
- protected xhrList: XMLHttpRequest[];
- protected file: File;
- protected key: string | null | undefined;
- protected token: string;
- protected assessKey: string;
- protected bucketName: string;
- protected uploadAt: number;
- protected progress: UploadProgress;
- protected onData: (data: UploadProgress) => void;
- protected onError: (err: QiniuError) => void;
- protected onComplete: (res: any) => void;
- /**
- * @returns utils.Response<any>
- * @description 子类通过该方法实现具体的任务处理
- */
- protected abstract run(): utils.Response<any>;
- constructor(options: UploadOptions, handlers: UploadHandlers, hostPool: HostPool, logger: Logger);
- protected checkAndUpdateUploadHost(): Promise<void>;
- protected checkAndUnfreezeHost(): void;
- private checkAndFreezeHost;
- private handleError;
- /**
- * @returns Promise 返回结果与上传最终状态无关,状态信息请通过 [Subscriber] 获取。
- * @description 上传文件,状态信息请通过 [Subscriber] 获取。
- */
- putFile(): Promise<void>;
- private clear;
- stop(): void;
- addXhr(xhr: XMLHttpRequest): void;
- private sendLog;
- getProgressInfoItem(loaded: number, size: number, fromCache?: boolean): ProgressCompose;
- }
|