From f19e0c970fcee6e7272ba997c9cc530ec3e6c0f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Tue, 23 Jun 2026 08:19:09 +0400 Subject: [PATCH] =?UTF-8?q?v1.0.122:=20ZIP=20unzip=20in=20Lucee=20(unzip.c?= =?UTF-8?q?fm)=20=E2=80=94=20no=20CORS,=20FileReader=E2=86=92base64?= =?UTF-8?q?=E2=86=92same-origin=20POST?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.cfm | 17 ++++++-- unzip.cfm | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 129 insertions(+), 4 deletions(-) create mode 100644 unzip.cfm diff --git a/index.cfm b/index.cfm index 66f65ec..ef3e648 100644 --- a/index.cfm +++ b/index.cfm @@ -75,7 +75,7 @@
Nubes - Сверка договоров — LLM AI-driven Event Sourcing v1.0.121 — Lucee + Сверка договоров — LLM AI-driven Event Sourcing v1.0.122 — Lucee
@@ -176,7 +176,6 @@ lucide.createIcons(); var UPLOAD_URL = 'https://contracts.kube5s.ru/lucee/upload.cfm'; var CONVERT_URL = 'https://contracts.kube5s.ru/convert-doc'; -var UNZIP_URL = 'https://contracts.kube5s.ru/unzip-upload'; var SITE_URL = ''; // same origin for api calls var fileInput = document.getElementById('fileInput'); @@ -259,9 +258,19 @@ fileInput.addEventListener('change', async function() { renderTable(); try { - var zipResp = await fetch(UNZIP_URL, { + // Читаем ZIP через FileReader → base64 + var zipData = await new Promise(function(resolve, reject) { + var reader = new FileReader(); + reader.onload = function() { resolve(reader.result); }; + reader.onerror = function() { reject(new Error('FileReader failed')); }; + reader.readAsDataURL(f); + }); + var zipB64 = zipData.split(',')[1]; // убрать префикс data:application/zip;base64, + + var zipResp = await fetch('/unzip.cfm', { method: 'POST', - body: (function() { var fd = new FormData(); fd.append('file', f); return fd; })() + headers: {'Content-Type': 'application/json'}, + body: JSON.stringify({filename: f.name, data: zipB64, contract_id: contractId || ''}) }); var zipData = await zipResp.json(); if (!zipData.ok || !zipData.files) throw new Error('unzip failed'); diff --git a/unzip.cfm b/unzip.cfm new file mode 100644 index 0000000..7f9445c --- /dev/null +++ b/unzip.cfm @@ -0,0 +1,116 @@ + + + + + {"ok":false,"error":"POST required"} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SELECT s.id as sid, s.document_id FROM supplements s + JOIN documents d ON d.id = s.document_id + WHERE s.contract_id = + AND d.filename = + + + DELETE FROM supplements WHERE id = + DELETE FROM documents WHERE id = + + + + INSERT INTO documents (filename, mime_type, original_bytes, status) VALUES ( + , + , + decode(, 'hex'), + 'uploaded' + ) + + + SELECT id FROM documents WHERE filename= AND status='uploaded' ORDER BY created_at DESC LIMIT 1 + + + + INSERT INTO contracts (number, client) VALUES (,'') + + + SELECT id FROM contracts ORDER BY created_at DESC LIMIT 1 + + + + + INSERT INTO supplements (contract_id, document_id, type) VALUES ( + , + , + + ) + + + + + + + + + + + + + +#serializeJSON(result)#