/**
 * message:错误时会通过fail函数返回该提示信息 string；
 * filepath：成功时返回的文件地址 string；
 * isExist：是否检查到有同样的文件，直接秒传成功 Boolean；
 * uploaded：上传成功的部分，返回的第几片，如[1,2]代表第1、2片已被上传过 Array<number>；
 */
type ResponseApi = {
    /**
     * 返回的文件地址
     */
    filepath?: string;
    /**
     * 是否检查到有同样的文件，直接秒传成功
     */
    isExist?: Boolean;
    /**
     * 上传成功的部分，返回的第几片，如[1,2]代表第1、2片已被上传过
     */
    uploaded?: Array<number>;
} | false;
interface changeDataApi {
    type: 'state' | 'schedule';
    file: File;
    state: stateType;
    schedule: number;
}
interface paramsApi {
    /**
     * 需要上传的文件
     */
    file: File | Array<File>;
    /**
     * 是否自动上传
     */
    auto?: Boolean;
    /**
     * 每次上传的文件大小，单位：M
     * 默认2M
     */
    size?: number;
    /**
     * 是否开启秒传
     */
    fast?: Boolean;
    /**
     * 快速验证地址
     */
    checkUrl?: string;
    /**
     * 上传地址
     */
    upUrl: string;
    /**
     * 合并地址
     */
    mergeUrl: string;
    /**
     * 总的并发数
     * 不能小于maxCount的整数
     * 默认3个
     */
    requestNum?: number;
    /**
     * 请求前的操作
     */
    requestBefore?: (...ags: any[]) => any[];
    /**
     * 请求头
     */
    requestHeaders?: Record<string, any>;
    /**
     * 成功完成函数
     * @param url 成功的
     * @returns
     */
    success?: (data: {
        file: File;
        url: string;
    }) => void;
    /**
     * 错误函数
     * @param message 错误信息
     * @returns
     */
    fail?: (error: {
        file?: File;
        message: string;
    }) => void;
    /**
     * 统一请求返回函数处理，返回特定的值
     * @param response
     * @returns ResponseApi
     */
    response?: (response: any, file: File) => ResponseApi;
    /**
     * 状态或者进度变化
     * @param data {type:状态还是进度，state：当前状态，schedule：当前上传进度（上传数/总数）}
     */
    change?: (data: changeDataApi) => void;
}
export interface fileMsgObjApi {
    /**
     * 当前文件上传进度
     */
    schedule: number;
    /**
     * 当前文件上传状态
     */
    state: stateType;
    /**
     * 并发数
     */
    requestNum: number;
    /**
     * 总共分成多少片
     */
    totalChunks: number;
    /**
     * 每片的md5值
     */
    identifiers?: Array<string>;
    /**
     * 当前正在上传的
     */
    index: number;
    /**
     * 文件名字后缀
     */
    suffix: string;
    /**
     *  文件分片后每片的信息
     * key为上传的第几片
     * status: wait：等待，loading：正在上传中，success：成功，error：失败
     */
    fileObj: fileObjApi;
    /**
     * 上传文件的请求，方便后面暂停之类的 顺序分别对应，如第一个：{1:()=>{}}
     */
    stopFnObj: Record<string, () => {}>;
    /**
     * 优先级,分别对应高｜中｜低
     */
    priority: priorityType;
}
/**
 *  文件分片后每片的信息
 */
interface fileObjApi {
    [key: string]: {
        /**
         * 当前片的上传状态
         */
        status: statusType;
        /**
         * 当前片的md5
         */
        identifier?: string;
        blob: Blob;
    };
}
export interface changeFileRequestNumObj {
    high: Array<fileMsgObjApi>;
    middle: Array<fileMsgObjApi>;
    low: Array<fileMsgObjApi>;
}
type priorityType = 'high' | 'middle' | 'low';
type statusType = 'wait' | 'loading' | 'success' | 'error';
type stateType = "" | "start" | "stop" | "wait" | "success";
export declare class BigFileUp {
    #private;
    /**
     * 文件上传的信息集合
     */
    private fileMsgObj;
    private fileList;
    private checkUrl;
    private upUrl;
    private mergeUrl;
    /**
     * 最大同时上传几个文件
     */
    private maxCount;
    /**
     * 当前在上传中的文件有几个
     * 最多maxCount个
     */
    private requestFileList;
    /**
     * 总的请求数
     * 不能小于maxCount的整数,保证全部开启时至少能分到一个
     */
    private requestNum;
    /**
     * 每个上传多大的文件,单位：M
     */
    private size;
    /**
     * 是否开启自动上传
     * 默认：true
     */
    private auto;
    /**
     * 是否开启秒传
     */
    private fast;
    /**
     * 跟优先级分配比例有关
     */
    private multiple;
    /**
     * 请求头
     */
    private requestHeaders;
    constructor(params: paramsApi);
    /**
     * 开始某一个
     */
    start(file: File): void;
    /**
     * 全部开始
     */
    startAll(): void;
    /**
     * 暂停某个
     * @param file
     */
    stop(file: File): void;
    /**
     * 全部暂停
     */
    stopAll(): void;
    /**
     * 请求前对请求体的操作
     * @param ags
     * @returns
     */
    private requestBefore;
    private response;
    /**
     * 触发错误的函数
     * @param message 错误提示信息
     * @param file 上传文件中失败的提示就要带此参数
     */
    error(message: string, file?: File): void;
    /**
     * 外部需要传进来的,触发成功函数
     */
    private success;
    /**
     * 外部需要传进来的,失败的
     * @param message
     */
    private fail;
    /**
     * 状态或者进度变化
     * @param data {type:状态还是进度，state：当前状态，schedule：当前上传进度（上传数/总数）}
     */
    private change;
    setRequestHeaders(headers: Record<string, any>): void;
    setResponse(response: (data: any, file: File) => ResponseApi): void;
    /**
     * 设置优先级
     * @param list {file:文件,priority:'high'|'middle'|'low'}
     */
    setPriority(list: Array<{
        file: File;
        priority: priorityType;
    }>): void;
}
export {};
