Files
QOffice/src/io/fileHelpers.ts
T
Курнат Андрей 9bf4dd3672 Initial QOffice implementation
2026-06-01 05:31:05 +03:00

53 lines
1.9 KiB
TypeScript

export const DOCX_MIME_TYPE = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
export const XLSX_MIME_TYPE = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
export const PPTX_MIME_TYPE = "application/vnd.openxmlformats-officedocument.presentationml.presentation";
export const EML_MIME_TYPE = "message/rfc822;charset=utf-8";
const pathSeparatorPattern = /[/\\]/;
export function officeTitleFromFileName(fileName: string, fallbackTitle: string) {
const trimmed = fileName.trim();
if (!trimmed) {
return fallbackTitle;
}
const parts = trimmed.split(pathSeparatorPattern).filter(Boolean);
return parts[parts.length - 1] ?? fallbackTitle;
}
export function replaceFileExtension(fileName: string, extension: string) {
const normalizedExtension = extension.startsWith(".") ? extension : `.${extension}`;
const baseName = fileName.trim() || "Документ";
const withoutExtension = baseName.replace(/\.[^.\\/]+$/, "");
return `${withoutExtension}${normalizedExtension}`;
}
export async function readOfficeFileAsArrayBuffer(file: File) {
if (typeof file.arrayBuffer !== "function") {
return readFileWithFileReader(file);
}
return file.arrayBuffer();
}
function readFileWithFileReader(file: File): Promise<ArrayBuffer> {
if (typeof FileReader === "undefined") {
throw new Error("Не удалось прочитать файл: среда не поддерживает File.arrayBuffer() и FileReader.");
}
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onerror = () => reject(new Error("Не удалось прочитать файл."));
reader.onload = () => {
if (reader.result instanceof ArrayBuffer) {
resolve(reader.result);
return;
}
reject(new Error("Не удалось прочитать файл как ArrayBuffer."));
};
reader.readAsArrayBuffer(file);
});
}