Co-authored-by: Reifonas <211114984+Reifonas@users.noreply.github.com>
This commit is contained in:
gpt-engineer-app[bot]
2026-05-15 11:48:29 +00:00
parent 1708398dd8
commit acbb02cc94
+31 -2
View File
@@ -37,7 +37,29 @@ const Index = () => {
return;
}
// Pré-validação rápida (tamanho) antes de ler o arquivo inteiro na memória
const sizeCheck = validateModelFile(file.name, file.size, ext);
if (!sizeCheck.ok) {
toast.error(sizeCheck.reason!);
return;
}
if (ext === 'glb') {
// Para GLB, valida a assinatura antes de criar o objectURL
try {
const head = await file.slice(0, 16).arrayBuffer();
const headBuf = new ArrayBuffer(file.size);
// Para validar assinatura precisamos só do header — slice já basta
const sigCheck = validateModelFile(file.name, file.size, ext, head);
if (!sigCheck.ok) {
toast.error(sigCheck.reason!);
if (sigCheck.detail) console.warn('[validateModelFile]', sigCheck.detail);
return;
}
void headBuf;
} catch (err) {
console.error('[upload] header read failed', err);
}
const url = URL.createObjectURL(file);
addModel({ fileName: file.name, fileSize: file.size, url });
toast.success(`Modelo "${file.name}" carregado com sucesso!`);
@@ -48,6 +70,12 @@ const Index = () => {
setConverting(true);
try {
const buffer = await file.arrayBuffer();
const sigCheck = validateModelFile(file.name, file.size, ext, buffer);
if (!sigCheck.ok) {
toast.error(sigCheck.reason!);
if (sigCheck.detail) console.warn('[validateModelFile]', sigCheck.detail);
return;
}
let result;
if (ext === 'ifc') {
result = await convertIFCtoGLB(buffer, file.name);
@@ -58,8 +86,9 @@ const Index = () => {
addModel({ fileName: result.fileName, fileSize: result.fileSize, url });
toast.success(`"${file.name}" convertido para GLB e carregado!`);
} catch (err) {
console.error(err);
toast.error(`Falha ao converter "${file.name}"`);
console.error('[upload] conversion failed', err);
const msg = err instanceof Error ? err.message : 'erro desconhecido';
toast.error(`Falha ao converter "${file.name}": ${msg}`);
} finally {
setConverting(false);
}