freeblox/packages/editor/src/utils/read-file.ts

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);
});
};