78 lines
2.0 KiB
JavaScript
78 lines
2.0 KiB
JavaScript
const fileInput = document.getElementById('fileInput');
|
|
const dropzone = document.getElementById('dropzone');
|
|
const uploadButton = document.getElementById('uploadButton');
|
|
const uploadForm = document.getElementById('uploadForm');
|
|
const statusDiv = document.getElementById('status');
|
|
|
|
const updateButtonState = () => {
|
|
uploadButton.disabled = !fileInput.files || fileInput.files.length === 0;
|
|
};
|
|
|
|
const setStatus = (message, type = '') => {
|
|
statusDiv.textContent = message;
|
|
statusDiv.className = type ? `status ${type}` : 'status';
|
|
};
|
|
|
|
dropzone.addEventListener('dragover', (event) => {
|
|
event.preventDefault();
|
|
dropzone.classList.add('dragover');
|
|
});
|
|
|
|
dropzone.addEventListener('dragleave', () => {
|
|
dropzone.classList.remove('dragover');
|
|
});
|
|
|
|
dropzone.addEventListener('drop', (event) => {
|
|
event.preventDefault();
|
|
dropzone.classList.remove('dragover');
|
|
|
|
if (event.dataTransfer?.files?.length) {
|
|
fileInput.files = event.dataTransfer.files;
|
|
updateButtonState();
|
|
}
|
|
});
|
|
|
|
fileInput.addEventListener('change', () => {
|
|
updateButtonState();
|
|
});
|
|
|
|
uploadForm.addEventListener('submit', async (event) => {
|
|
event.preventDefault();
|
|
|
|
if (!fileInput.files || fileInput.files.length === 0) {
|
|
setStatus('Выберите файлов для загрузки.', 'error');
|
|
return;
|
|
}
|
|
|
|
const formData = new FormData();
|
|
Array.from(fileInput.files).forEach((file) => {
|
|
formData.append('files', file);
|
|
});
|
|
|
|
uploadButton.disabled = true;
|
|
dropzone.classList.remove('dragover');
|
|
setStatus('Загрузка...', '');
|
|
|
|
try {
|
|
const response = await fetch('/upload_file', {
|
|
method: 'POST',
|
|
body: formData
|
|
});
|
|
|
|
if (!response.ok) {
|
|
throw new Error(`Ошибка сервера: ${response.status}`);
|
|
}
|
|
|
|
const data = await response.text();
|
|
setStatus(`Путь к файлу: ${data}`, 'success');
|
|
fileInput.value = '';
|
|
} catch (error) {
|
|
setStatus(`Не удалось загрузить файлы: ${error.message}`, 'error');
|
|
} finally {
|
|
uploadButton.disabled = false;
|
|
}
|
|
});
|
|
|
|
updateButtonState();
|
|
|