diff --git a/site/templates/upload.html b/site/templates/upload.html
index 4659968..906e603 100644
--- a/site/templates/upload.html
+++ b/site/templates/upload.html
@@ -59,7 +59,7 @@
 }})
-
Сверка договоров v1.38
+
Сверка договоров v1.39
@@ -155,47 +155,33 @@
window.removeFile = removeFile;
- // ── Загрузка base64 (JSON, с повторами) ──────────────────
+ // ── Загрузка base64 (JSON) ──────────────────────────────────
function uploadFileJSON(file, cid, onProgress) {
- var b64 = null;
-
- function tryUpload(attempt) {
- return new Promise(function(resolve, reject) {
- function doSend() {
- var xhr = new XMLHttpRequest();
- xhr.open('POST', '/upload');
- xhr.setRequestHeader('Content-Type', 'application/json');
- xhr.timeout = 120000;
- xhr.upload.onprogress = function(e) {
- if (e.lengthComputable && onProgress) onProgress(Math.round(e.loaded / e.total * 100));
- };
- xhr.onload = function() {
- if (xhr.status === 200) {
- try { resolve(JSON.parse(xhr.responseText)); }
- catch(e) { reject(new Error('Bad JSON')); }
- } else { reject(new Error('HTTP ' + xhr.status)); }
- };
- xhr.onerror = function() { reject(new Error('Сеть')); };
- xhr.ontimeout = function() { reject(new Error('Таймаут')); };
- xhr.send(JSON.stringify({filename: file.name, data: b64, cid: cid || null}));
- }
-
- if (b64) { doSend(); return; }
- var reader = new FileReader();
- reader.onload = function() { b64 = reader.result.split(',')[1]; doSend(); };
- reader.onerror = function() { reject(new Error('Read error')); };
- reader.readAsDataURL(file);
- }).catch(function(err) {
- if (attempt < 3) {
- return new Promise(function(r) { setTimeout(r, 1000); }).then(function() {
- return tryUpload(attempt + 1);
- });
- }
- throw err;
- });
- }
- return tryUpload(1);
+ return new Promise(function(resolve, reject) {
+ var reader = new FileReader();
+ reader.onload = function() {
+ var b64 = reader.result.split(',')[1];
+ var xhr = new XMLHttpRequest();
+ xhr.open('POST', '/upload');
+ xhr.setRequestHeader('Content-Type', 'application/json');
+ xhr.timeout = 30000;
+ xhr.upload.onprogress = function(e) {
+ if (e.lengthComputable && onProgress) onProgress(Math.round(e.loaded / e.total * 100));
+ };
+ xhr.onload = function() {
+ if (xhr.status === 200) {
+ try { resolve(JSON.parse(xhr.responseText)); }
+ catch(e) { reject(new Error('Bad JSON')); }
+ } else { reject(new Error('HTTP ' + xhr.status)); }
+ };
+ xhr.onerror = function() { reject(new Error('Сеть')); };
+ xhr.ontimeout = function() { reject(new Error('Таймаут')); };
+ xhr.send(JSON.stringify({filename: file.name, data: b64, cid: cid || null}));
+ };
+ reader.onerror = function() { reject(new Error('Read error')); };
+ reader.readAsDataURL(file);
+ });
}
// ── Выбор файла → сразу загрузка ────────────────────────────