This commit is contained in:
+28
-20
@@ -214,28 +214,36 @@ async function uploadAll() {
|
|||||||
fileSummary.textContent = summary;
|
fileSummary.textContent = summary;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** uploadChunk(blob) — отправить чанк как raw тело */
|
/** uploadChunk(blob) — отправить чанк с ретраем до 3 раз */
|
||||||
function uploadChunk(blob) {
|
function uploadChunk(blob) {
|
||||||
|
var MAX = 3;
|
||||||
|
var attempt = 0;
|
||||||
|
|
||||||
return new Promise(function (resolve, reject) {
|
return new Promise(function (resolve, reject) {
|
||||||
var xhr = new XMLHttpRequest();
|
function trySend() {
|
||||||
xhr.open('POST', '/upload');
|
attempt++;
|
||||||
xhr.timeout = 10000;
|
var xhr = new XMLHttpRequest();
|
||||||
xhr.setRequestHeader('Content-Type', 'application/octet-stream');
|
xhr.open('POST', '/upload');
|
||||||
xhr.onload = function () {
|
xhr.timeout = 5000;
|
||||||
try {
|
xhr.setRequestHeader('Content-Type', 'application/octet-stream');
|
||||||
var r = JSON.parse(xhr.responseText);
|
xhr.onload = function () {
|
||||||
if (r.ok) {
|
try {
|
||||||
resolve({ bytes: r.bytes, elapsed_ms: r.elapsed_ms });
|
var r = JSON.parse(xhr.responseText);
|
||||||
} else {
|
if (r.ok) { resolve({ bytes: r.bytes, elapsed_ms: r.elapsed_ms }); }
|
||||||
reject(new Error(r.error || 'Ошибка сервера'));
|
else { reject(new Error(r.error || 'Ошибка сервера')); }
|
||||||
}
|
} catch (e) { reject(new Error('Bad JSON')); }
|
||||||
} catch (e) {
|
};
|
||||||
reject(new Error('Bad JSON'));
|
xhr.onerror = function () {
|
||||||
}
|
if (attempt < MAX) { setTimeout(trySend, 300); }
|
||||||
};
|
else { reject(new Error('Сеть')); }
|
||||||
xhr.onerror = function () { reject(new Error('Сеть')); };
|
};
|
||||||
xhr.ontimeout = function () { reject(new Error('Таймаут')); };
|
xhr.ontimeout = function () {
|
||||||
xhr.send(blob);
|
if (attempt < MAX) { setTimeout(trySend, 300); }
|
||||||
|
else { reject(new Error('Таймаут')); }
|
||||||
|
};
|
||||||
|
xhr.send(blob);
|
||||||
|
}
|
||||||
|
trySend();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user