添加读取文件函数

This commit is contained in:
2021-11-10 00:47:15 +08:00
parent b5a879c9e6
commit 8617de5c38

View File

@@ -30,17 +30,73 @@ class Utils {
console.log('[JSONP]', data);
},
};
var scriptElem = document.createElement('script');
var el = document.createElement('script');
Object.assign(config, options);
window[config.cbName] = config.cbFunc;
scriptElem.addEventListener('load', function () {
el.addEventListener('load', function () {
this.remove();
});
scriptElem.setAttribute('src', config.url);
el.setAttribute('src', config.url);
document.body.appendChild(scriptElem);
document.body.appendChild(el);
}
/**
* 以文本方式读取文件(异步)
*
* @param {Event} ev 输入框 change 事件对象
* @param {boolean} resetValue 是否自动重置输入框 value 属性
*
* @returns {Promise<string[]>} `{ name: 文件名, content: 文件内容 }`
*/
readFileAsText(ev, resetValue) {
const blank = [];
/** @type {HTMLInputElement} */
const el = ev.currentTarget;
/** @type {FileList} */
const files = el.files;
if (!files || files.length === 0) {
return Promise.resolve(blank);
}
const fnProc = (procResolve, procReject) => {
const reads = [];
for (let i = 0; i < files.length; i++) {
const file = files[i];
const reader = new FileReader();
const fnRead = (readResolve, readReject) => {
// 成功
reader.onload = () => {
readResolve(reader.result);
};
// 失败
reader.onerror = () => {
readReject('');
};
// 读取
reader.readAsText(file);
};
reads.push(new Promise(fnRead));
}
Promise.all(reads).then((res) => {
// [成功]
procResolve(res);
resetValue && el.setAttribute('value', '');
}).catch(() => {
// [失败]
procReject(blank);
});
};
return new Promise(fnProc);
}
}