44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
export const readString = (file: File, dataUrl = false) => {
|
|
return new Promise<string>((resolve, reject) => {
|
|
const reader = new FileReader();
|
|
reader.addEventListener('load', (event) =>
|
|
resolve(event.target?.result as string)
|
|
);
|
|
reader.addEventListener('error', reject);
|
|
|
|
if (dataUrl) {
|
|
reader.readAsDataURL(file);
|
|
} else {
|
|
reader.readAsText(file);
|
|
}
|
|
});
|
|
};
|
|
|
|
export const readFileToString = (allowedTypes?: string, dataUrl = false) => {
|
|
let cleanUpTimer: ReturnType<typeof setTimeout>;
|
|
const input = document.createElement('input');
|
|
input.type = 'file';
|
|
input.style.display = 'none';
|
|
|
|
if (allowedTypes) input.accept = allowedTypes;
|
|
|
|
const cleanUp = () => {
|
|
clearTimeout(cleanUpTimer);
|
|
document.body.removeChild(input);
|
|
};
|
|
|
|
return new Promise<string>((resolve, reject) => {
|
|
input.addEventListener('change', () => {
|
|
input.files && readString(input.files![0], dataUrl).then(resolve, reject);
|
|
cleanUp();
|
|
});
|
|
|
|
document.body.appendChild(input);
|
|
input.click();
|
|
cleanUpTimer = setTimeout(() => {
|
|
cleanUp();
|
|
reject(new Error('Read Timed Out'));
|
|
}, 30000);
|
|
});
|
|
};
|