diff --git a/backend/app/class/enity/class_task.php b/backend/app/class/enity/class_task.php index 760b774..6088399 100644 --- a/backend/app/class/enity/class_task.php +++ b/backend/app/class/enity/class_task.php @@ -128,7 +128,7 @@ class Task extends BaseEntity { self::check_task($id); // Удаляем папку с файлами если есть - $upload_dir = __DIR__ . '/../../../public/img/task/' . $id; + $upload_dir = __DIR__ . '/../../../public/task/' . $id; if (is_dir($upload_dir)) { $files = glob($upload_dir . '/*'); foreach ($files as $file) { diff --git a/backend/app/class/enity/class_taskImage.php b/backend/app/class/enity/class_taskImage.php index 796bf30..c7bb1cb 100644 --- a/backend/app/class/enity/class_taskImage.php +++ b/backend/app/class/enity/class_taskImage.php @@ -3,24 +3,24 @@ class TaskImage { protected static $db_name = 'cards_task'; - protected static $upload_path = '/public/img/task/'; + protected static $upload_path = '/public/task/'; // Валидация всех данных для загрузки protected static function validate($task_id, $file_base64, $file_name) { // Проверка и получение задачи $task = Task::check_task($task_id); - // Декодируем base64 - $file_data = base64_decode(preg_replace('/^data:image\/\w+;base64,/', '', $file_base64)); + // Декодируем base64 (убираем любой data: префикс) + $file_data = base64_decode(preg_replace('/^data:[^;]+;base64,/', '', $file_base64)); if (!$file_data) { return ['success' => false, 'errors' => ['file' => 'Ошибка декодирования файла']]; } // Проверка расширения - $allowed_ext = ['png', 'jpg', 'jpeg']; + $allowed_ext = ['png', 'jpg', 'jpeg', 'zip', 'rar']; $ext = strtolower(pathinfo($file_name, PATHINFO_EXTENSION)); if (!in_array($ext, $allowed_ext)) { - return ['success' => false, 'errors' => ['file' => 'Разрешены только PNG, JPG, JPEG']]; + return ['success' => false, 'errors' => ['file' => 'Разрешены только PNG, JPG, JPEG, ZIP, RAR']]; } // Проверка размера (10 МБ) @@ -29,18 +29,11 @@ class TaskImage { return ['success' => false, 'errors' => ['file' => 'Файл слишком большой. Максимум 10 МБ']]; } - // Проверка MIME типа - $finfo = new finfo(FILEINFO_MIME_TYPE); - $mime = $finfo->buffer($file_data); - $allowed_mime = ['image/png', 'image/jpeg']; - if (!in_array($mime, $allowed_mime)) { - return ['success' => false, 'errors' => ['file' => 'Недопустимый тип файла']]; - } - // Всё ок — возвращаем данные return [ 'task' => $task, - 'file_data' => $file_data + 'file_data' => $file_data, + 'is_archive' => in_array($ext, ['zip', 'rar']) ]; } @@ -69,7 +62,7 @@ class TaskImage { $file_data = $validation['file_data']; // Путь к папке - $upload_dir = __DIR__ . '/../../../public/img/task/' . $task_id; + $upload_dir = __DIR__ . '/../../../public/task/' . $task_id; if (!is_dir($upload_dir)) { mkdir($upload_dir, 0755, true); } @@ -123,7 +116,7 @@ class TaskImage { // Получаем текущие файлы $current_files = json_decode($task['file_img'], true) ?? []; - $upload_dir = __DIR__ . '/../../../public/img/task/' . $task_id; + $upload_dir = __DIR__ . '/../../../public/task/' . $task_id; $deleted = []; // Удаляем каждый файл diff --git a/backend/app/functions/routing.php b/backend/app/functions/routing.php index 8433a5e..d5e70dc 100644 --- a/backend/app/functions/routing.php +++ b/backend/app/functions/routing.php @@ -1,9 +1,26 @@ -