添加读取文件函数
This commit is contained in:
@@ -30,17 +30,73 @@ class Utils {
|
|||||||
console.log('[JSONP]', data);
|
console.log('[JSONP]', data);
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
var scriptElem = document.createElement('script');
|
var el = document.createElement('script');
|
||||||
|
|
||||||
Object.assign(config, options);
|
Object.assign(config, options);
|
||||||
window[config.cbName] = config.cbFunc;
|
window[config.cbName] = config.cbFunc;
|
||||||
|
|
||||||
scriptElem.addEventListener('load', function () {
|
el.addEventListener('load', function () {
|
||||||
this.remove();
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user