From d0db160a3165a13e2488a808584e22095ff3b60f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80?= <78488229+viktor138irk@users.noreply.github.com> Date: Thu, 7 May 2026 03:32:23 +0900 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B0=D0=B7=D1=80=D0=B5=D1=88=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D0=B0=D1=80=D1=85=D0=B8=D0=B2=D1=8B=20=D0=B2=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B5=20=D0=B4=D0=B8?= =?UTF-8?q?=D1=81=D0=BA=D0=BE=D0=B2=D1=8B=D1=85=20=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/templates/disk_images.html | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/web/templates/disk_images.html b/web/templates/disk_images.html index a59e531..2610dd4 100644 --- a/web/templates/disk_images.html +++ b/web/templates/disk_images.html @@ -11,7 +11,7 @@
Диски
-
Готовые образы установленных систем: .img / .raw / .qcow2
+
Готовые образы установленных систем: .img / .raw / .qcow2, а также архивы .zip / .tar.gz / .tgz
user: {{ user }} @@ -30,14 +30,14 @@

Загрузить образ установленной системы

- только .img .raw .qcow2 + .img .raw .qcow2 .zip .tar.gz
-
Файл ещё не выбран. В этом разделе разрешены только .img, .raw и .qcow2.
+
Файл ещё не выбран. Разрешены .img, .raw, .qcow2, .zip, .tar.gz и .tgz.
@@ -62,11 +62,11 @@
Raspberry / Orange Pi images - Загрузи .img, дождись конвертации, затем в “Создать VM” выбери режим “Готовый диск”. + Загрузи .img или архив с .img, дождись распаковки/конвертации, затем в “Создать VM” выбери режим “Готовый диск”.
- Оригинал не трогаем - Virtuality сохраняет исходник и создаёт рядом готовый qcow2-шаблон. + Архивы безопасно распаковываются + Поддерживаются .zip, .tar.gz и .tgz. Из архива берём только .img/.raw/.qcow2.
qemu-img convert -p -f raw -O qcow2 source.img source.qcow2
@@ -97,7 +97,7 @@ {% else %} - Образов пока нет. Загрузи .img, .raw или .qcow2. + Образов пока нет. Загрузи .img, .raw, .qcow2 или архив .zip/.tar.gz/.tgz. {% endfor %} @@ -115,7 +115,7 @@ const statusLine = document.getElementById('upload-status'); const loadedLine = document.getElementById('upload-loaded'); const speedLine = document.getElementById('upload-speed'); - const allowedExtensions = ['.img', '.raw', '.qcow2']; + const allowedExtensions = ['.img', '.raw', '.qcow2', '.zip', '.tar.gz', '.tgz']; function bytesText(bytes) { if (!bytes) return '0 MB'; @@ -173,11 +173,11 @@ fileInput.addEventListener('change', function () { const file = fileInput.files[0]; if (!file) { - hint.textContent = 'Файл ещё не выбран. В этом разделе разрешены только .img, .raw и .qcow2.'; + hint.textContent = 'Файл ещё не выбран. Разрешены .img, .raw, .qcow2, .zip, .tar.gz и .tgz.'; return; } if (!validDiskFile(file)) { - hint.textContent = 'Неверный тип файла. Здесь можно выбрать только .img, .raw или .qcow2.'; + hint.textContent = 'Неверный тип файла. Здесь можно выбрать только .img, .raw, .qcow2, .zip, .tar.gz или .tgz.'; fileInput.value = ''; return; } @@ -188,7 +188,7 @@ event.preventDefault(); const file = fileInput.files[0]; if (!validDiskFile(file)) { - hint.textContent = 'Выбери образ установленной системы: .img, .raw или .qcow2.'; + hint.textContent = 'Выбери образ установленной системы или архив: .img, .raw, .qcow2, .zip, .tar.gz или .tgz.'; return; } @@ -199,7 +199,7 @@ box.hidden = false; button.disabled = true; fileInput.disabled = true; - resetProgress('Передача образа на сервер…', '0 MB из ' + bytesText(file.size)); + resetProgress('Передача файла на сервер…', '0 MB из ' + bytesText(file.size)); xhr.upload.onprogress = function (event) { if (!event.lengthComputable) { @@ -213,7 +213,7 @@ percent.textContent = pct + '%'; loadedLine.textContent = bytesText(event.loaded) + ' из ' + bytesText(event.total); speedLine.textContent = bytesText(speed) + '/s'; - if (pct >= 100) statusLine.textContent = 'Файл передан. Сервер сохраняет образ…'; + if (pct >= 100) statusLine.textContent = 'Файл передан. Сервер сохраняет и при необходимости распаковывает архив…'; }; xhr.onload = async function () {