import {Event} from '../lang/Event'; import {Listeners} from '../lang/Listeners'; import {LoggerUtil} from '../lang/LoggerUtil'; import {ObjectBase} from '../lang/ObjectBase'; //========================================================== // 文件读取器。 // // @class // @author maocy // @version 150401 //========================================================== export class FileViewer extends ObjectBase { // 准备好 public ready: boolean; // 文件名称 public fileName: string; // 长度 public length: number; // 数据 public data: any; // 加载状态 // public statusLoading: boolean; // 加载监听器集合 public loadListeners: Listeners; // 读取器 protected _reader: FileReader; //========================================================== // 加载中处理。 //========================================================== public ohLoad() { //var o = this.__linker; //LoggerUtil.error(linker, 'Load file failure. (error={1])', reader.error); } //========================================================== // 开始加载处理。 //========================================================== public ohLoadStart() { //var o = this.__linker; //LoggerUtil.error(linker, 'Load file failure. (error={1])', reader.error); } //========================================================== // 加载进度响应处理。 //========================================================== public ohProgress() { //var o = this.__linker; //LoggerUtil.error(linker, 'Load file failure. (error={1])', reader.error); } //========================================================== // 加载完成处理。 //========================================================== public ohLoadEnd() { var linker = (this as any).__linker; var reader = linker._reader; if (reader.error) { LoggerUtil.error(linker, 'Load file failure. (error={1])', reader.error); } else { // 设置属性 var length = linker.length = reader.result.byteLength; var data = linker.data = reader.result; this.ready = true; // 完成处理 var event:any = new Event(linker); event.fileName = linker.fileName; event.dataLength = length; event.data = data; linker.loadListeners.process(event); event.dispose(); } } //========================================================== // 构造处理。 //========================================================== public constructor() { super(); // 创建读取器 this.length = 0; var reader = this._reader = new FileReader(); (reader as any).__linker = this; reader.onload = this.ohLoad; reader.onprogress = this.ohProgress; reader.onloadstart = this.ohLoadStart; reader.onloadend = this.ohLoadEnd; this.loadListeners = new Listeners(); } //========================================================== // 加载文件数据。 // // @param file 文件数据 //========================================================== public loadFile(file) { this.fileName = file.name; this.length = file.size; var reader = this._reader; reader.readAsArrayBuffer(file); } //========================================================== // 释放处理。 //========================================================== public dispose() { // 释放属性 var reader = this._reader; (reader as any).__linker = null; reader.onloadstart = null; reader.onload = null; reader.onloadend = null; reader.onprogress = null; this._reader = null; this.fileName = null; this.data = null; // 父处理 super.dispose(); } }