FileUtil.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. (function() {
  2. var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
  3. var __module = nodeEnv ? module : {exports:{}};
  4. var __filename = 'preview-scripts/assets/script/mk/utils/FileUtil.js';
  5. var __require = nodeEnv ? function (request) {
  6. return cc.require(request);
  7. } : function (request) {
  8. return __quick_compile_project__.require(request, __filename);
  9. };
  10. function __define (exports, require, module) {
  11. if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
  12. cc._RF.push(module, '169f6jrZC1DK61LjHa0l1kK', 'FileUtil');
  13. // script/mk/utils/FileUtil.ts
  14. "use strict";
  15. Object.defineProperty(exports, "__esModule", { value: true });
  16. /**
  17. * 文件操作工具类
  18. * @author 薛鸿潇
  19. */
  20. var FileUtil = /** @class */ (function () {
  21. function FileUtil() {
  22. }
  23. /**
  24. * 打开文件选择器
  25. * @param {string} accept
  26. * @param {(file: File) => void} callback
  27. * @memberof FileUtil
  28. */
  29. FileUtil.prototype.openLocalFile = function (accept, callback) {
  30. var inputEl = document.getElementById('file_input');
  31. if (!inputEl) {
  32. inputEl = document.createElement('input');
  33. inputEl.id = 'file_input';
  34. inputEl.setAttribute('id', 'file_input');
  35. inputEl.setAttribute('type', 'file');
  36. inputEl.setAttribute('class', 'fileToUpload');
  37. inputEl.style.opacity = '0';
  38. inputEl.style.position = 'absolute';
  39. inputEl.setAttribute('left', '-999px');
  40. document.body.appendChild(inputEl);
  41. }
  42. accept = accept || ".*";
  43. inputEl.setAttribute('accept', accept);
  44. inputEl.onchange = function (event) {
  45. var files = inputEl.files;
  46. if (files && files.length > 0) {
  47. var file = files[0];
  48. if (callback)
  49. callback(file);
  50. }
  51. };
  52. inputEl.click();
  53. };
  54. /**
  55. * 读取本地文件数据
  56. * @param {File} file
  57. * @param {READ_FILE_TYPE} readType
  58. * @param {((result: string | ArrayBuffer) => void)} callback
  59. * @memberof FileUtil
  60. */
  61. FileUtil.prototype.readLocalFile = function (file, readType, callback) {
  62. var reader = new FileReader();
  63. reader.onload = function (event) {
  64. if (callback) {
  65. if (reader.readyState == FileReader.DONE) {
  66. callback(reader.result);
  67. }
  68. else {
  69. callback(null);
  70. }
  71. }
  72. };
  73. switch (readType) {
  74. case READ_FILE_TYPE.DATA_URL:
  75. reader.readAsDataURL(file);
  76. break;
  77. case READ_FILE_TYPE.TEXT:
  78. reader.readAsText(file); // 作为字符串读出
  79. break;
  80. case READ_FILE_TYPE.BINARY:
  81. reader.readAsBinaryString(file);
  82. break;
  83. case READ_FILE_TYPE.ARRAYBUFFER:
  84. reader.readAsArrayBuffer(file);
  85. break;
  86. }
  87. };
  88. /**
  89. * 保存数据到本地
  90. * @param {*} fileNameToSaveAs 要保存的文件名
  91. * @param {*} textToWrite 要保存的文件内容
  92. * @memberof FileUtil
  93. */
  94. FileUtil.prototype.saveForBrowser = function (fileNameToSaveAs, textToWrite) {
  95. if (cc.sys.isBrowser) {
  96. console.log("浏览器");
  97. var textFileAsBlob = new Blob([textToWrite], { type: 'application/json' });
  98. var downloadLink = document.createElement("a");
  99. downloadLink.download = fileNameToSaveAs;
  100. downloadLink.innerHTML = "Download File";
  101. if (window.webkitURL != null) {
  102. // Chrome allows the link to be clicked
  103. // without actually adding it to the DOM.
  104. downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob);
  105. }
  106. else {
  107. // Firefox requires the link to be added to the DOM
  108. // before it can be clicked.
  109. downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
  110. // downloadLink.onclick = destroyClickedElement;
  111. downloadLink.style.display = "none";
  112. document.body.appendChild(downloadLink);
  113. }
  114. downloadLink.click();
  115. }
  116. };
  117. return FileUtil;
  118. }());
  119. exports.default = FileUtil;
  120. /**
  121. * 读取文件方式
  122. */
  123. var READ_FILE_TYPE;
  124. (function (READ_FILE_TYPE) {
  125. READ_FILE_TYPE[READ_FILE_TYPE["DATA_URL"] = 0] = "DATA_URL";
  126. READ_FILE_TYPE[READ_FILE_TYPE["TEXT"] = 1] = "TEXT";
  127. READ_FILE_TYPE[READ_FILE_TYPE["BINARY"] = 2] = "BINARY";
  128. READ_FILE_TYPE[READ_FILE_TYPE["ARRAYBUFFER"] = 3] = "ARRAYBUFFER";
  129. })(READ_FILE_TYPE || (READ_FILE_TYPE = {}));
  130. cc._RF.pop();
  131. }
  132. if (nodeEnv) {
  133. __define(__module.exports, __require, __module);
  134. }
  135. else {
  136. __quick_compile_project__.registerModuleFunc(__filename, function () {
  137. __define(__module.exports, __require, __module);
  138. });
  139. }
  140. })();
  141. //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcc2NyaXB0XFxta1xcdXRpbHNcXEZpbGVVdGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7OztHQUdHO0FBQ0g7SUFBQTtJQW1HQSxDQUFDO0lBakdHOzs7OztPQUtHO0lBQ0ksZ0NBQWEsR0FBcEIsVUFBcUIsTUFBYyxFQUFFLFFBQThCO1FBQy9ELElBQUksT0FBTyxHQUF1QyxRQUFRLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDVixPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMxQyxPQUFPLENBQUMsRUFBRSxHQUFHLFlBQVksQ0FBQztZQUMxQixPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztZQUN6QyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNyQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztZQUM5QyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxHQUFHLENBQUM7WUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO1lBQ3BDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3ZDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3RDO1FBRUQsTUFBTSxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUM7UUFDeEIsT0FBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFFdkMsT0FBTyxDQUFDLFFBQVEsR0FBRyxVQUFDLEtBQUs7WUFDckIsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQTtZQUN6QixJQUFJLEtBQUssSUFBSSxL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QUMsRUFMSSxjQUFjLEtBQWQsY0FBYyxRQUtsQiIsImZpbGUiOiIiLCJzb3VyY2VSb290IjoiLyIsInNvdXJjZXNDb250ZW50IjpbIlxyXG4vKipcclxuICog5paH5Lu25pON5L2c5bel5YW357G7XHJcbiAqIEBhdXRob3Ig6Jab6bi/5r2HXHJcbiAqL1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGaWxlVXRpbCB7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmiZPlvIDmlofku7bpgInmi6nlmahcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBhY2NlcHRcclxuICAgICAqIEBwYXJhbSB7KGZpbGU6IEZpbGUpID0+IHZvaWR9IGNhbGxiYWNrXHJcbiAgICAgKiBAbWVtYmVyb2YgRmlsZVV0aWxcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9wZW5Mb2NhbEZpbGUoYWNjZXB0OiBzdHJpbmcsIGNhbGxiYWNrOiAoZmlsZTogRmlsZSkgPT4gdm9pZCkge1xyXG4gICAgICAgIGxldCBpbnB1dEVsOiBIVE1MSW5wdXRFbGVtZW50ID0gPEhUTUxJbnB1dEVsZW1lbnQ+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZpbGVfaW5wdXQnKTtcclxuICAgICAgICBpZiAoIWlucHV0RWwpIHtcclxuICAgICAgICAgICAgaW5wdXRFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XHJcbiAgICAgICAgICAgIGlucHV0RWwuaWQgPSAnZmlsZV9pbnB1dCc7XHJcbiAgICAgICAgICAgIGlucHV0RWwuc2V0QXR0cmlidXRlKCdpZCcsICdmaWxlX2lucHV0Jyk7XHJcbiAgICAgICAgICAgIGlucHV0RWwuc2V0QXR0cmlidXRlKCd0eXBlJywgJ2ZpbGUnKTtcclxuICAgICAgICAgICAgaW5wdXRFbC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ2ZpbGVUb1VwbG9hZCcpO1xyXG4gICAgICAgICAgICBpbnB1dEVsLnN0eWxlLm9wYWNpdHkgPSAnMCc7XHJcbiAgICAgICAgICAgIGlucHV0RWwuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgICAgICAgICBpbnB1dEVsLnNldEF0dHJpYnV0ZSgnbGVmdCcsICctOTk5cHgnKTtcclxuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbnB1dEVsKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGFjY2VwdCA9IGFjY2VwdCB8fCBcIi4qXCI7XHJcbiAgICAgICAgaW5wdXRFbC5zZXRBdHRyaWJ1dGUoJ2FjY2VwdCcsIGFjY2VwdCk7XHJcblxyXG4gICAgICAgIGlucHV0RWwub25jaGFuZ2UgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgbGV0IGZpbGVzID0gaW5wdXRFbC5maWxlc1xyXG4gICAgICAgICAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIGZpbGUgPSBmaWxlc1swXTtcclxuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2soZmlsZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaW5wdXRFbC5jbGljaygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog6K+75Y+W5pys5Zyw5paH5Lu25pWw5o2uXHJcbiAgICAgKiBAcGFyYW0ge0ZpbGV9IGZpbGVcclxuICAgICAqIEBwYXJhbSB7UkVBRF9GSUxFX1RZUEV9IHJlYWRUeXBlXHJcbiAgICAgKiBAcGFyYW0geygocmVzdWx0OiBzdHJpbmcgfCBBcnJheUJ1ZmZlcikgPT4gdm9pZCl9IGNhbGxiYWNrXHJcbiAgICAgKiBAbWVtYmVyb2YgRmlsZVV0aWxcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlYWRMb2NhbEZpbGUoZmlsZTogRmlsZSwgcmVhZFR5cGU6IFJFQURfRklMRV9UWVBFLCBjYWxsYmFjazogKHJlc3VsdDogc3RyaW5nIHwgQXJyYXlCdWZmZXIpID0+IHZvaWQpIHtcclxuICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlYWRlci5yZWFkeVN0YXRlID09IEZpbGVSZWFkZXIuRE9ORSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHJlYWRlci5yZXN1bHQpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhudWxsKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgc3dpdGNoIChyZWFkVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFJFQURfRklMRV9UWVBFLkRBVEFfVVJMOlxyXG4gICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBSRUFEX0ZJTEVfVFlQRS5URVhUOlxyXG4gICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7Ly8g5L2c5Li65a2X56ym5Liy6K+75Ye6XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBSRUFEX0ZJTEVfVFlQRS5CSU5BUlk6XHJcbiAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgUkVBRF9GSUxFX1RZUEUuQVJSQVlCVUZGRVI6XHJcbiAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDkv53lrZjmlbDmja7liLDmnKzlnLBcclxuICAgICAqIEBwYXJhbSB7Kn0gZmlsZU5hbWVUb1NhdmVBcyDopoHkv53lrZjnmoTmlofku7blkI1cclxuICAgICAqIEBwYXJhbSB7Kn0gdGV4dFRvV3JpdGUg6KaB5L+d5a2Y55qE5paH5Lu25YaF5a65XHJcbiAgICAgKiBAbWVtYmVyb2YgRmlsZVV0aWxcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNhdmVGb3JCcm93c2VyKGZpbGVOYW1lVG9TYXZlQXM6IGFueSwgdGV4dFRvV3JpdGU6IGFueSkge1xyXG4gICAgICAgIGlmIChjYy5zeXMuaXNCcm93c2VyKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5rWP6KeI5ZmoXCIpO1xyXG4gICAgICAgICAgICBsZXQgdGV4dEZpbGVBc0Jsb2IgPSBuZXcgQmxvYihbdGV4dFRvV3JpdGVdLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyB9KTtcclxuICAgICAgICAgICAgbGV0IGRvd25sb2FkTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICBkb3dubG9hZExpbmsuZG93bmxvYWQgPSBmaWxlTmFtZVRvU2F2ZUFzO1xyXG4gICAgICAgICAgICBkb3dubG9hZExpbmsuaW5uZXJIVE1MID0gXCJEb3dubG9hZCBGaWxlXCI7XHJcbiAgICAgICAgICAgIGlmICh3aW5kb3cud2Via2l0VVJMICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIC8vIENocm9tZSBhbGxvd3MgdGhlIGxpbmsgdG8gYmUgY2xpY2tlZCAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgLy8gd2l0aG91dCBhY3R1YWxseSBhZGRpbmcgaXQgdG8gdGhlIERPTS4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGRvd25sb2FkTGluay5ocmVmID0gd2luZG93LndlYmtpdFVSTC5jcmVhdGVPYmplY3RVUkwodGV4dEZpbGVBc0Jsb2IpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gRmlyZWZveCByZXF1aXJlcyB0aGUgbGluayB0byBiZSBhZGRlZCB0byB0aGUgRE9NICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAvLyBiZWZvcmUgaXQgY2FuIGJlIGNsaWNrZWQuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBkb3dubG9hZExpbmsuaHJlZiA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKHRleHRGaWxlQXNCbG9iKTtcclxuICAgICAgICAgICAgICAgIC8vIGRvd25sb2FkTGluay5vbmNsaWNrID0gZGVzdHJveUNsaWNrZWRFbGVtZW50OyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgZG93bmxvYWRMaW5rLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG93bmxvYWRMaW5rKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZG93bmxvYWRMaW5rLmNsaWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxufVxyXG4vKipcclxuICog6K+75Y+W5paH5Lu25pa55byPXHJcbiAqL1xyXG5lbnVtIFJFQURfRklMRV9UWVBFIHtcclxuICAgIERBVEFfVVJMLC8vIHJlYWRBc0RhdGFVUkwsIGJhc2U2NFxyXG4gICAgVEVYVCwvLyByZWFkQXNUZXh0XHJcbiAgICBCSU5BUlksLy8gcmVhZEFzQmluYXJ5U3RyaW5nXHJcbiAgICBBUlJBWUJVRkZFUiwvLyByZWFkQXNBcnJheUJ1ZmZlclxyXG59Il19