import { Component } from "./component"; import SparkMD5 from 'spark-md5'; export interface IAsset { assetType?: string; fetch?: Function; } /** * @description : Asset 可以考虑放在资源管理器中 * @param {*} * @return {*} * @example : */ export abstract class Asset extends Component implements IAsset { //文件的类型 assetType?: string; // 如果是文本 , 文本的内容 content?: any; //链接 url: string = ""; createTime: number = Date.now(); // md5 hash码 用来快速判断文件是否相同 hash: string = ""; constructor() { super(); } save() { } imageMD5(file: any): Promise { var blobSlice = File.prototype.slice || (File as any).prototype.mozSlice || (File as any).prototype.webkitSlice; const chunkSize = 2097152; // read in chunks of 2MB const chunks = Math.ceil(file.size / chunkSize); let currentChunk = 0; const spark = new SparkMD5.ArrayBuffer(); let log: string = ""; const deferred = Promise; function frOnload(e: any): Promise | void { spark.append(e.target.result); // append array buffer currentChunk++; if (currentChunk < chunks) return loadNext(); else { deferred.resolve(spark.end()); } }; function frOnerror() { deferred.reject('文件出错'); }; function loadNext() { var fileReader = new FileReader(); fileReader.onload = frOnload; fileReader.onerror = frOnerror; var start = currentChunk * chunkSize, end = ((start + chunkSize) >= file.size) ? file.size : start + chunkSize; fileReader.readAsArrayBuffer(blobSlice.call(file, start, end)); } loadNext(); return Promise.resolve("as")/* .promise */; } }