Changes
Co-authored-by: Reifonas <211114984+Reifonas@users.noreply.github.com>
This commit is contained in:
+31
-2
@@ -37,7 +37,29 @@ const Index = () => {
|
|||||||
return;
|
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') {
|
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);
|
const url = URL.createObjectURL(file);
|
||||||
addModel({ fileName: file.name, fileSize: file.size, url });
|
addModel({ fileName: file.name, fileSize: file.size, url });
|
||||||
toast.success(`Modelo "${file.name}" carregado com sucesso!`);
|
toast.success(`Modelo "${file.name}" carregado com sucesso!`);
|
||||||
@@ -48,6 +70,12 @@ const Index = () => {
|
|||||||
setConverting(true);
|
setConverting(true);
|
||||||
try {
|
try {
|
||||||
const buffer = await file.arrayBuffer();
|
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;
|
let result;
|
||||||
if (ext === 'ifc') {
|
if (ext === 'ifc') {
|
||||||
result = await convertIFCtoGLB(buffer, file.name);
|
result = await convertIFCtoGLB(buffer, file.name);
|
||||||
@@ -58,8 +86,9 @@ const Index = () => {
|
|||||||
addModel({ fileName: result.fileName, fileSize: result.fileSize, url });
|
addModel({ fileName: result.fileName, fileSize: result.fileSize, url });
|
||||||
toast.success(`"${file.name}" convertido para GLB e carregado!`);
|
toast.success(`"${file.name}" convertido para GLB e carregado!`);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error(err);
|
console.error('[upload] conversion failed', err);
|
||||||
toast.error(`Falha ao converter "${file.name}"`);
|
const msg = err instanceof Error ? err.message : 'erro desconhecido';
|
||||||
|
toast.error(`Falha ao converter "${file.name}": ${msg}`);
|
||||||
} finally {
|
} finally {
|
||||||
setConverting(false);
|
setConverting(false);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user