UNPKG

whale-plus

Version:

A Component Library for Vue 3

1 lines 7.57 kB
{"version":3,"file":"MaxFileUpload.mjs","sources":["../../../../../../packages/upload-sdk/src/upload-client/MaxFileUpload.ts"],"sourcesContent":["import { Task, TaskQueue } from '../upload-core/TaskQueue';\nimport { EventEmitter } from '../upload-core/EventEmitter';\nimport { MultiThreadSplitor } from './split/imp-work/MultiThreadSplitor';\nimport { TestRequest } from './testRequest';\nimport type { RequestStrategy } from './RequestStrategy.ts';\nimport type { ChunkSplitor } from './split/ChunkSplitor.ts';\nimport type { Chunk } from './split/FileChunk.ts';\n\nexport interface FileListener {\n uploadSuccessListener(chunk: Chunk): void;\n\n chunkListener(chunks: Chunk[]): void;\n\n chunkEndListener(hash: string): void;\n}\n\nexport class MaxFileUpload {\n private requestStrategy: RequestStrategy; // 请求策略,没有传递则使用默认策略\n private splitStrategy: ChunkSplitor; // 分片策略,没有传递则默认多线程分片\n private taskQueue: TaskQueue; // 任务队列\n private file: File;\n private token = '';\n private uploadEmitter = new EventEmitter<'progress' | 'end'>();\n private chunkSize: number = 5 * 1024 * 1024;\n\n private fileListener: FileListener | null = null;\n\n setFileListener(listener: FileListener) {\n this.fileListener = listener;\n return this;\n }\n\n // 设置请求策略\n setRequestStrategy(requestStrategy: RequestStrategy) {\n this.requestStrategy = requestStrategy;\n return this;\n }\n\n // 设置分片策略\n setSplitStrategy(splitStrategy: ChunkSplitor) {\n this.splitStrategy = splitStrategy;\n return this;\n }\n\n // 设置任务队列\n setTaskQueue(taskQueue: TaskQueue) {\n this.taskQueue = taskQueue;\n return this;\n }\n\n // 设置文件\n setFile(file: File) {\n this.file = file;\n return this;\n }\n\n // 设置token\n setToken(token: string) {\n this.token = token;\n return this;\n }\n\n // 设置分片大小\n setChunkSize(chunkSize: number) {\n this.chunkSize = chunkSize;\n return this;\n }\n\n static with(file: File) {\n return new MaxFileUpload(file);\n }\n\n private constructor(file: File) {\n // 私有构造函数,禁止直接实例化\n this.file = file;\n this.requestStrategy = new TestRequest();\n this.taskQueue = new TaskQueue(4);\n this.splitStrategy = new MultiThreadSplitor(this.file, this.chunkSize);\n }\n\n // 初始化\n async start() {\n // 获取文件token\n this.token = await this.requestStrategy.createFile(this.file);\n // 开始分片\n this.splitStrategy.split();\n // 分片事件监听\n this.splitStrategy.on('chunks', this.handleChunks.bind(this));\n this.splitStrategy.on('wholeHash', this.handleWholeHash.bind(this));\n\n // this.uploadEmitter.on('progress', (chunk: Chunk) => {\n // // 上传进度事件\n // // ...\n // });\n this.uploadEmitter.on('end', (chunk: Chunk) => {\n // 上传结束事件\n // ...\n // console.log('上传结束事件----', chunk.index);\n if (this.fileListener?.uploadSuccessListener) {\n this.fileListener.uploadSuccessListener(chunk);\n }\n });\n }\n\n // 分片事件处理\n private handleChunks(chunks: Chunk[]) {\n if (this.fileListener?.chunkListener) {\n this.fileListener.chunkListener(chunks);\n }\n // 分片上传任务加入队列\n chunks.forEach((chunk) => {\n this.taskQueue.addAndStart(new Task(this.uploadChunk.bind(this), chunk));\n });\n }\n\n async uploadChunk(chunk: Chunk) {\n // hash校验\n const resp = await this.requestStrategy.patchHash(\n this.token,\n chunk.hash,\n 'chunk'\n );\n if (resp.hasFile) {\n // 文件已存在\n return;\n }\n // 分片上传\n await this.requestStrategy.uploadChunk(chunk, this.uploadEmitter);\n }\n\n // 整体hash事件处理\n private async handleWholeHash(hash: string) {\n // console.log('整个文件hash', hash);\n if (this.fileListener?.chunkEndListener) {\n this.fileListener.chunkEndListener(hash);\n }\n // hash校验\n const resp = await this.requestStrategy.patchHash(this.token, hash, 'file');\n if (resp.hasFile) {\n // 文件已存在\n // this.emit('end', resp.url);\n return;\n }\n // 根据resp.rest重新编排后续任务\n // ...\n }\n}\n"],"names":[],"mappings":"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"}