v6.0.0: вся обработка на бэкенде — zip.js удалён, фронт только XHR+скачивание
Deploy drhider / validate (push) Waiting to run

This commit is contained in:
2026-07-13 07:53:08 +04:00
parent cbf619aaba
commit e590d8ab9a
3 changed files with 8 additions and 123 deletions
+7 -28
View File
@@ -8,7 +8,6 @@
<meta http-equiv="Expires" content="0">
<title>DrHider — обфускация документов</title>
<link rel="icon" type="image/svg+xml" href="/static/favicon.svg">
<script src="/static/zip.js"></script>
<style>
:root {
--brand-primary: #2563eb;
@@ -156,15 +155,11 @@ async function uploadFiles() {
if (sf.length === 0) return;
ub.disabled = true;
const total = sf.length;
const tstamp = ts();
const maps = [];
const zEntries = [];
let ok = 0, fail = 0;
for (let i = 0; i < total; i++) {
const f = sf[i], n = i + 1;
const t0 = performance.now();
// Бегущий секундомер в статусе
const timer = setInterval(() => {
const sec = Math.round((performance.now() - t0) / 1000);
ss(i, '<span style="color:#2563eb">⏳ ' + sec + 'с</span>');
@@ -186,14 +181,13 @@ async function uploadFiles() {
});
clearInterval(timer);
const el = ((performance.now() - t0) / 1000).toFixed(1);
const files = await unzip(blob);
for (const [name, data] of Object.entries(files)) {
if (name === 'mapping.csv') {
const t = await data.text();
const ls = t.split('\n');
maps.push(maps.length === 0 ? ls.join('\n') : ls.slice(1).join('\n'));
} else { zEntries.push({ name, data }); }
}
// Скачиваем ZIP как есть — бэкенд всё сделал
const u = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = u;
a.download = f.name.replace(/\.[^.]+$/, '') + '_obfuscated.zip';
a.click();
URL.revokeObjectURL(u);
ss(i, '<span style="color:#22c55e">✓ ' + el + 'с</span>');
ok++;
} catch (err) {
@@ -204,21 +198,6 @@ async function uploadFiles() {
if (i < total - 1) await new Promise(r => setTimeout(r, 300));
}
if (ok > 0) {
st.className = 'status pack'; st.textContent = 'Упаковка...';
const zb = await buildZip(zEntries);
const u = URL.createObjectURL(zb);
const a = document.createElement('a'); a.href = u; a.download = 'drhider_' + tstamp + '.zip'; a.click();
URL.revokeObjectURL(u);
}
if (maps.length > 0) {
const cb = new Blob(['\ufeff' + maps.join('\n')], { type: 'text/csv;charset=utf-8' });
const u = URL.createObjectURL(cb);
const a = document.createElement('a'); a.href = u; a.download = 'drhider_' + tstamp + '.csv'; a.click();
URL.revokeObjectURL(u);
}
st.className = fail === 0 ? 'status done' : 'status error';
st.textContent = fail === 0 ? '✅ Готово! ' + ok + '/' + total : 'Готово: ' + ok + ' OK, ' + fail + ' ошибок из ' + total;
ub.disabled = false;