| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- /**
- * 文件操作工具类
- * @author 薛鸿潇
- */
- export default class FileUtil {
- /**
- * 打开文件选择器
- * @param {string} accept
- * @param {(file: File) => void} callback
- * @memberof FileUtil
- */
- public openLocalFile(accept: string, callback: (file: File) => void) {
- let inputEl: HTMLInputElement = <HTMLInputElement>document.getElementById('file_input');
- if (!inputEl) {
- inputEl = document.createElement('input');
- inputEl.id = 'file_input';
- inputEl.setAttribute('id', 'file_input');
- inputEl.setAttribute('type', 'file');
- inputEl.setAttribute('class', 'fileToUpload');
- inputEl.style.opacity = '0';
- inputEl.style.position = 'absolute';
- inputEl.setAttribute('left', '-999px');
- document.body.appendChild(inputEl);
- }
- accept = accept || ".*";
- inputEl.setAttribute('accept', accept);
- inputEl.onchange = (event) => {
- let files = inputEl.files
- if (files && files.length > 0) {
- var file = files[0];
- if (callback) callback(file);
- }
- }
- inputEl.click();
- }
- /**
- * 读取本地文件数据
- * @param {File} file
- * @param {READ_FILE_TYPE} readType
- * @param {((result: string | ArrayBuffer) => void)} callback
- * @memberof FileUtil
- */
- public readLocalFile(file: File, readType: READ_FILE_TYPE, callback: (result: string | ArrayBuffer) => void) {
- var reader = new FileReader();
- reader.onload = function (event) {
- if (callback) {
- if (reader.readyState == FileReader.DONE) {
- callback(reader.result);
- } else {
- callback(null);
- }
- }
- };
- switch (readType) {
- case READ_FILE_TYPE.DATA_URL:
- reader.readAsDataURL(file);
- break;
- case READ_FILE_TYPE.TEXT:
- reader.readAsText(file);// 作为字符串读出
- break;
- case READ_FILE_TYPE.BINARY:
- reader.readAsBinaryString(file);
- break;
- case READ_FILE_TYPE.ARRAYBUFFER:
- reader.readAsArrayBuffer(file);
- break;
- }
- }
- /**
- * 保存数据到本地
- * @param {*} fileNameToSaveAs 要保存的文件名
- * @param {*} textToWrite 要保存的文件内容
- * @memberof FileUtil
- */
- public saveForBrowser(fileNameToSaveAs: any, textToWrite: any) {
- if (cc.sys.isBrowser) {
- console.log("浏览器");
- let textFileAsBlob = new Blob([textToWrite], { type: 'application/json' });
- let downloadLink = document.createElement("a");
- downloadLink.download = fileNameToSaveAs;
- downloadLink.innerHTML = "Download File";
- if (window.webkitURL != null) {
- // Chrome allows the link to be clicked
- // without actually adding it to the DOM.
- downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob);
- } else {
- // Firefox requires the link to be added to the DOM
- // before it can be clicked.
- downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
- // downloadLink.onclick = destroyClickedElement;
- downloadLink.style.display = "none";
- document.body.appendChild(downloadLink);
- }
- downloadLink.click();
- }
- }
- }
- /**
- * 读取文件方式
- */
- enum READ_FILE_TYPE {
- DATA_URL,// readAsDataURL, base64
- TEXT,// readAsText
- BINARY,// readAsBinaryString
- ARRAYBUFFER,// readAsArrayBuffer
- }
|