You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
export const uploadFile = (file: File, type: "dataUrl" | "text" = "text") => {
|
|
return new Promise<string>((resolve, reject) => {
|
|
const reader = new FileReader();
|
|
reader.addEventListener("load", () => {
|
|
if (reader.error) {
|
|
return reject(reader.error);
|
|
}
|
|
if (reader.result == null) {
|
|
return reject(new Error("Result was empty"));
|
|
}
|
|
resolve(reader.result.toString());
|
|
});
|
|
|
|
if (type === "dataUrl") {
|
|
reader.readAsDataURL(file);
|
|
}
|
|
if (type === "text") {
|
|
reader.readAsText(file);
|
|
}
|
|
});
|
|
};
|
|
|
|
export const saveFile = (name: string, type: string, content: string) => {
|
|
const a = document.createElement("a");
|
|
const blob = new Blob([content], {
|
|
type,
|
|
});
|
|
const url = URL.createObjectURL(blob);
|
|
a.setAttribute("href", url);
|
|
a.setAttribute("download", name);
|
|
a.click();
|
|
};
|
|
|
|
export const selectLocalFiles = (type: string[]) => {
|
|
return new Promise<FileList>((resolve, reject) => {
|
|
const fileInput = document.createElement("input");
|
|
fileInput.type = "file";
|
|
fileInput.accept = type.join(",");
|
|
fileInput.oninput = (evt) => {
|
|
const files: FileList | undefined = (evt.currentTarget as any).files;
|
|
if (!files) {
|
|
return resolve(new FileList());
|
|
}
|
|
|
|
resolve(files);
|
|
};
|
|
fileInput.click();
|
|
});
|
|
};
|