From e680725818c697e7e596251b34145be28aa235b9 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:26:01 +0900 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B3=D1=80=D0=B0=D0=BD=D0=B8=D1=87?= =?UTF-8?q?=D0=B8=D1=82=D1=8C=20=D0=B2=D1=8B=D0=B1=D0=BE=D1=80=20=D0=BE?= =?UTF-8?q?=D0=B1=D1=80=D0=B0=D0=B7=D0=BE=D0=B2=20=D0=B3=D0=BE=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=D1=8B=D1=85=20=D0=B4=D0=B8=D1=81=D0=BA=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=B2=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5=D0=B9=D1=81?= =?UTF-8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/templates/disk_images.html | 37 +++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/web/templates/disk_images.html b/web/templates/disk_images.html index 8f78f5b..a59e531 100644 --- a/web/templates/disk_images.html +++ b/web/templates/disk_images.html @@ -11,7 +11,7 @@
Диски
-
Готовые локальные образы .img / .raw / .qcow2 для импорта VM
+
Готовые образы установленных систем: .img / .raw / .qcow2
user: {{ user }} @@ -29,15 +29,15 @@
-

Загрузить образ диска

- .img .raw .qcow2 +

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

+ только .img .raw .qcow2
-
Файл ещё не выбран.
+
Файл ещё не выбран. В этом разделе разрешены только .img, .raw и .qcow2.
@@ -115,6 +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']; function bytesText(bytes) { if (!bytes) return '0 MB'; @@ -125,6 +126,12 @@ return value.toFixed(value >= 10 || i === 0 ? 0 : 1) + ' ' + units[i]; } + function validDiskFile(file) { + if (!file || !file.name) return false; + const lower = file.name.toLowerCase(); + return allowedExtensions.some(ext => lower.endsWith(ext)); + } + function resetProgress(title, detail) { bar.style.width = '0%'; percent.textContent = '0%'; @@ -165,13 +172,25 @@ fileInput.addEventListener('change', function () { const file = fileInput.files[0]; - hint.textContent = file ? file.name + ' · ' + bytesText(file.size) : 'Файл ещё не выбран.'; + if (!file) { + hint.textContent = 'Файл ещё не выбран. В этом разделе разрешены только .img, .raw и .qcow2.'; + return; + } + if (!validDiskFile(file)) { + hint.textContent = 'Неверный тип файла. Здесь можно выбрать только .img, .raw или .qcow2.'; + fileInput.value = ''; + return; + } + hint.textContent = file.name + ' · ' + bytesText(file.size); }); form.addEventListener('submit', function (event) { event.preventDefault(); const file = fileInput.files[0]; - if (!file) return; + if (!validDiskFile(file)) { + hint.textContent = 'Выбери образ установленной системы: .img, .raw или .qcow2.'; + return; + } const xhr = new XMLHttpRequest(); const data = new FormData(form);