UNPKG

naive-upload

Version:

<p align="left"> <a href="https://www.npmjs.org/package/naive-upload"> <img src="https://img.shields.io/npm/v/naive-upload.svg"> </a> <a href="https://bundlephobia.com/package/naive-upload@latest"> <img src="https://img.shields.io/bundl

516 lines (515 loc) 13.3 kB
import { IApiService } from "../Core/IApiService"; import { IConfig } from "../Model/IConfig"; import Settings from "../Model/Settings"; import RawFile from "../Model/RawFile"; import SelectedFile from "../Model/SelectedFile"; import { IUserFileInfo } from "../Model/IUserFileInfo"; import { IOpenApi } from "../Extention/IOpenApi"; import { Layout } from "../Model/Layout"; /** * 初级上传工具 * * @author LCTR * @date 2022-09-22 */ export default class NaiveUpload { /** * * @param settings 设置 * @param apiService 接口服务 */ constructor(settings: Settings, apiService: IApiService); /** * 用于设置数据对象的双向绑定 */ private readonly reactive; /** * 设置 */ private readonly settings; /** * 接口服务 */ private readonly apiService; /** * 文件上传配置 */ private config?; /** * 源文件集合 */ private readonly rawFileList; /** * 选择的文件集合 */ private readonly selectedFileList; /** * 选择的文件排序值映射表 * * <p>key:排序值,value:selectedFileList中的索引</p> */ private readonly selectedFileSortMap; /** * 校验文件队列 * 数据项为this.SelectedFileList的索引 */ private checkQueue; /** * 当前正在校验中的文件数量 */ private checkHandlerCount; /** * 上传文件队列 * 数据项为this.SelectedFileList的索引 */ private uploadQueue; /** * 暂停文件 * key:数据项为this.SelectedFileList的索引,value:{step:0:校验步骤、1:上传步骤,helper:实例,continue:是否已恢复} */ private pausedQueue; /** * 当前正在上传中的文件数量 */ private uploadHandlerCount; /** * 追加文件后返回的文件令牌和selectedFileList索引映射表 */ private tokenWithIndex; /** * 布局变更后执行 * * @param layout 布局 */ private layoutChanged; /** * 配置变更后执行 * * @param config 配置 */ private configChanged; /** * 选择的文件集合变更后执行 * * @param files 当前的文件集合(已排序) */ private selectedFileListChanged; /** * 文件排序值映射表变更后执行 * * @param sortMap 当前的文件排序值映射表 */ private selectedFileSortMapChanged; /** * 用户文件信息集合变更后执行 * * @param userFileInfoList 当前的用户文件信息集合(已排序) */ private userFileInfoListChanged; /** * 提示异常 * * @param error 异常 */ private alertError; /** * 文件校验前执行 * * @param file 文件 * @returns 是否保留该文件 */ private beforeCheck?; /** * 文件校验结束后执行 * * @param rawFile 文件 */ private afterCheck?; /** * 文件校验全部校验结束后执行 * * @param rawFileList 文件集合 */ private afterCheckAll?; /** * 文件上传后执行 * * @param rawFile 文件 */ private afterUpload?; /** * 所有文件上传后执行 * <p>此方法将会异步执行</p> * * @param rawFileList 文件集合 */ private afterUploadAll?; /** * 发生异常后执行 * <p>此方法将会异步执行</p> * * @param error 异常 */ private handlerError?; /** * 更新文件上传配置 */ private updateConfig; /** * 监听配置的变化 */ private watchSettings; /** * 文件排序值映射表变更 */ private selectedFileSortMapChangedTrigger; /** * 追加文件 * * @param file */ private appendFile; /** * 追加以前上传过的文件 * * @param id */ private appendUploadedFile; /** * 获取文件类型 * * @param selectedFile */ private getFileType; /** * 检查图像 * * @param {any} selectedFile */ private checkImage; /** * 获取原始文件 * * @param selectedFile */ getRawFile(this: NaiveUpload, selectedFile: SelectedFile): RawFile; /** * 文件切片 * * @param selectedFile */ private getChunks; /** * 处理文件 * * @param selectedFileIndex 索引 */ private handleFile; /** * 推送至校验队列 * * @param selectedFileIndex */ private pushToCheckQueue; /** * 推送至上传队列 * * @param selectedFileIndex */ private pushToUploadQueue; /** * 开始校验MD5 */ private checkMD5; /** * 开始上传已经校验过了的文件 */ private upload; /** * 计算进度 * * @param selectedFile 文件 * @param progress 进度 */ private static calcPercent; /** * 抛出异常 * * @param error */ private throwError; /** * 异常 * * @param selectedFileIndex * @param message 异常信息 * @param retry 是否允许重试 * @param done 回调 */ private error; /** * 校验时异常 * * @param selectedFileIndex * @param message 说明 * @param retry 是否允许重试 * @param e 异常 */ private checkError; /** * 上传时异常 * * @param selectedFileIndex * @param message 说明 * @param retry 是否允许重试 * @param e 异常 */ private uploadError; /** * 文件重命名 * * @param selectedFile * @param rename 文件重命名 */ private renameByIndex; /** * 恢复处理 * * @param index */ private continueByIndex; /** * 获取实例 * * @param settings 设置 * @param apiService 接口服务 */ static getInstance(settings: Settings, apiService: IApiService): Promise<NaiveUpload>; /** * 获取设置 */ getSettings(this: NaiveUpload): Settings; /** * 获取文件上传配置 */ getConfig(this: NaiveUpload): IConfig; /** * 校验队列中的文件 */ checkNow(this: NaiveUpload): void; /** * 上传队列中的文件 */ uploadNow(this: NaiveUpload): void; /** * 暂停 * * @param token 追加文件后返回的文件令牌,未设置此参数时暂停全部 */ pause(this: NaiveUpload, token?: string): void; /** * 恢复 * * @param token 追加文件后返回的文件令牌,未设置此参数时恢复全部 */ continue(this: NaiveUpload, token?: string): void; /** * 删除 * * @param token 追加文件后返回的文件令牌 */ remove(this: NaiveUpload, token: string): void; /** * 清空 */ clean(this: NaiveUpload): void; /** * 重置 */ reset(this: NaiveUpload): void; /** * 获取开发的接口 */ getOpenApi(this: NaiveUpload): IOpenApi; /** * 文件重命名 * * @param token 追加文件后返回的文件令牌 * @param rename 文件重命名 */ rename(this: NaiveUpload, token: string, rename: string): Promise<void>; /** * 获取下载地址 * * @param selectedFile 选择的文件 * @return 下载地址 */ getDownloadUrl(this: NaiveUpload, selectedFile: SelectedFile): string | null; /** * 选择的文件列表是否有有效的数据 */ anyFile(this: NaiveUpload): boolean; /** * 获取选择文件时要显示的警告信息 */ getSelectFileAlarmInfo(this: NaiveUpload): string; /** * 获取文件选择框类名 */ getSelectCLass(this: NaiveUpload): string; /** * 获取全部允许的类型 */ getAllowedTypes(this: NaiveUpload): string; /** * 是否已达上限 * * @return true: 已达上限 */ limited(this: NaiveUpload): boolean; /** * 当前文件总大小 * * @return size: 字节数 */ totalSize(this: NaiveUpload): number; /** * 追加文件 * * @param file 文件 */ append(this: NaiveUpload, file: File): void; /** * 追加以前上传过的文件 * * @param id 标识 */ appendById(this: NaiveUpload, id: string): Promise<void>; /** * 更改排序值 * * @param currentIndex 当前排序值 * @param targetIndex 目标排序值 */ changeSort(this: NaiveUpload, currentIndex: number, targetIndex: number): void; /** * 注册布局变更后执行的函数 * * @param even */ registerLayoutChanged(this: NaiveUpload, even: (layout: Layout) => void): void; /** * 注册配置变更后执行的函数 * * @param even */ registerConfigChanged(this: NaiveUpload, even: (config: IConfig) => void): void; /** * 注册选择的文件排序值映射表变更后执行的函数 * * @param even */ registerSelectedFileListChanged(this: NaiveUpload, even: (files: SelectedFile[]) => void): void; /** * 注册选择的文件集合变更后执行的函数 * * @param even */ registerSelectedFileSortMapChanged(this: NaiveUpload, even: (sortMap: Map<number, number>) => void): void; /** * 注册用户文件信息集合变更后执行的函数 * * @param even */ registerUserFileInfoListChanged(this: NaiveUpload, even: (userFileInfoList: IUserFileInfo[]) => void): void; /** * 注册提示异常的函数 * * @param even */ registerAlertError(this: NaiveUpload, even: (error: Error) => void): void; /** * 设置文件校验前执行的函数 * * @param even */ setupBeforeCheck(this: NaiveUpload, even: (file: File) => Promise<boolean>): void; /** * 设置文件校验结束后执行的函数 * * @param even */ setupAfterCheck(this: NaiveUpload, even: (rawFile: RawFile) => Promise<void>): void; /** * 设置文件校验全部校验结束后执行的函数 * * @param even */ setupAfterCheckAll(this: NaiveUpload, even: (rawFileList: RawFile[]) => Promise<void>): void; /** * 设置文件上传后执行的函数 * * @param even */ setupAfterUpload(this: NaiveUpload, even: (rawFile: RawFile) => Promise<void>): void; /** * 设置所有文件上传后执行的函数 * * @param even */ setupAfterUploadAll(this: NaiveUpload, even: (rawFileList: RawFile[]) => Promise<void>): void; /** * 设置发生异常后执行的函数 * * @param even */ setupHandlerError(this: NaiveUpload, even: (error: Error) => Promise<void>): void; /** * 获取当前选择的文件数量 */ getSelectedFileCount(this: NaiveUpload): number; /** * 获取当前选择的文件排序值映射表 */ getSelectedFileSortMap(this: NaiveUpload): Map<number, number>; /** * 获取当前所有选择的文件集合 * * @param sort 是否需要排序 */ getSelectedFileList(this: NaiveUpload, sort: boolean): SelectedFile[]; /** * 获取当前所有文件集合 * * @param sort 是否需要排序 */ getRawFileList(this: NaiveUpload, sort: boolean): RawFile[]; /** * 获取当前所有的用户文件信息集合 * * @param sort 是否需要排序 */ getUserFileInfoList(this: NaiveUpload, sort: boolean): IUserFileInfo[]; /** * 获取选择的文件 * * @param sortKey 排序值 */ getSelectedFile(this: NaiveUpload, sortKey: number): SelectedFile; /** * 获取渐变色样式 * @param {string} type 类型 conic锥形渐变,linear线性渐变 * @param {string} color 颜色 * @param {number} value1 值1 * @param {number} value2 值2 */ getGradientStyle(type: string, color: string, value1: number, value2: number): string; /** * 获取渐变色样式 * @param {string} type 类型 conic锥形渐变,linear线性渐变 * @param {string} color 颜色 * @param {number} value1 值1 * @param {number} value2 值2 */ getGradientStyleObject(type: string, color: string, value1: number, value2: number): Array<Record<string, string>>; }