- Added comprehensive AI Assistant system (aiassist/ directory): * Vector search and embedding capabilities * Typebot proxy integration * Elastic search functionality * Message classification and chat history * MCP proxy for external integrations - Implemented Court Status API (GetCourtStatus.php): * Real-time court document status checking * Integration with external court systems * Comprehensive error handling and logging - Enhanced S3 integration: * Improved file backup system with metadata * Batch processing capabilities * Enhanced error logging and recovery * Copy operations with URL fixing - Added Telegram contact creation API - Improved error logging across all modules - Enhanced callback system for AI responses - Extensive backup file storage with timestamps - Updated documentation and README files - File storage improvements: * Thousands of backup files with proper metadata * Fix operations for broken file references * Project-specific backup and recovery systems * Comprehensive file integrity checking Total: 26,461+ files added/modified including AWS SDK, vendor dependencies, and extensive backup system.
5.6 KiB
Исправление проблемы с символом # в URL файлов S3
Дата: 15 октября 2025
Проблема: Ошибка 403 при скачивании файлов из S3 с символом # в имени
Статус: ✅ Исправлено
Описание проблемы
При отправке документов в суд через скрипт Send2Court.php возникала ошибка 403 при скачивании некоторых файлов из S3:
2025-10-15 15:00:07 - ошибка скачивания файла из S3, HTTP код: 403
URL: .../8_Договор_на_оказание_услуг_08-27-2025-15-47-39_Агеев__13_CTP#realfile.pdf
Причина
Символ # в URL интерпретируется браузерами и curl как якорь (anchor/fragment identifier). Всё после # считается частью фрагмента URL и не отправляется на сервер. Например:
- URL:
https://s3.example.com/file#realfile.pdf - Сервер получает:
https://s3.example.com/file❌
Из-за этого S3 не мог найти файл и возвращал ошибку 403.
Решение
Модифицирована функция getTempFileFromS3() в файле /include/utils/Debexpert-guzzle.php:
Что изменено
-
Автоматическая замена проблемных символов:
#→%23(URL-кодированная версия)(пробел) →%20
-
Улучшенное логирование:
- Логируется исходный URL
- Если URL был изменён, логируется исправленная версия
- Легче отслеживать проблемы
Пример работы
До исправления:
URL: https://s3.twcstorage.ru/bucket/file_CTP#realfile.pdf
Результат: ❌ HTTP 403
После исправления:
Исходный URL: https://s3.twcstorage.ru/bucket/file_CTP#realfile.pdf
Исправленный: https://s3.twcstorage.ru/bucket/file_CTP%23realfile.pdf
Результат: ✅ HTTP 200
Затронутые файлы
- ✅
/include/utils/Debexpert-guzzle.php- функцияgetTempFileFromS3()обновлена - ℹ️
/include/utils/Letters.php- уже имеет обработку#realfile(другая сигнатура функции)
Дополнительные преимущества
- Исправление работает автоматически, не требует изменений в БД
- Обрабатывает не только
#, но и пробелы - Логирование помогает отслеживать исправления
- Совместимо со старыми URL без проблемных символов
Рекомендации
Для будущего
Рекомендуется при загрузке файлов в S3 сразу очищать имена файлов от проблемных символов:
- Заменять
#на-или_ - Убирать или заменять пробелы на
_ - Избегать других спецсимволов:
&,?,%, и т.д.
Мониторинг
После внедрения исправления в логах logs/send2court.log появятся записи:
2025-10-15 15:00:07 - скачиваем файл из S3 (исходный URL): .../file#test.pdf
2025-10-15 15:00:07 - URL исправлен для корректной загрузки: .../file%23test.pdf
Это нормальное поведение и подтверждает, что исправление работает.
Результаты проверки
Дата: 15 октября 2025, 16:41-16:43
Проект: 390657 (Агеев / ООО СКИЛБОКС)
✅ Исправление работает идеально!
Все 5 проблемных файлов скачались успешно:
2025-10-15 16:41:23 - скачиваем файл из S3 (исходный URL): ...CTP#realfile.pdf
2025-10-15 16:41:23 - URL исправлен для корректной загрузки: ...CTP%23realfile.pdf
2025-10-15 16:41:23 - файл сохранен во временную папку: /tmp/other_doc_0_1760535683.pdf
Скачанные файлы:
- ✅ 8_Договор_на_оказание_услуг...CTP#realfile.pdf
- ✅ 9_Подтверждение_оплаты...CTP#realfile.pdf
- ✅ 10_1_Скрин_личного_кабинета...CTP#realfile.pdf
- ✅ 11_1_Подтверждение_претензионной_работы...CTP#realfile.pdf
- ✅ 11_2_Подтверждение_претензионной_работы...CTP#realfile.pdf
🎯 Бонус: решена проблема ошибки 500!
Оказалось, что ошибка 500 от прокси-сервера возникала из-за этих недостающих файлов:
- JSON указывал 21 файл, но реально отправлялось только 16
- Система обнаруживала несоответствие и возвращала ошибку 500
- После исправления все 21 файл загрузились → получен номер 41RS0001-201-25-0001140 ✅
Статус: ✅ Проблема полностью решена и проверена на реальном проекте