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);