/** * 文件操作工具类 * @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 = 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 }