- 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.
119 lines
5.6 KiB
Markdown
119 lines
5.6 KiB
Markdown
# Исправление проблемы с символом # в 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`:
|
||
|
||
### Что изменено
|
||
|
||
1. **Автоматическая замена проблемных символов:**
|
||
- `#` → `%23` (URL-кодированная версия)
|
||
- ` ` (пробел) → `%20`
|
||
|
||
2. **Улучшенное логирование:**
|
||
- Логируется исходный 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
|
||
```
|
||
|
||
**Скачанные файлы:**
|
||
1. ✅ 8_Договор_на_оказание_услуг...CTP#realfile.pdf
|
||
2. ✅ 9_Подтверждение_оплаты...CTP#realfile.pdf
|
||
3. ✅ 10_1_Скрин_личного_кабинета...CTP#realfile.pdf
|
||
4. ✅ 11_1_Подтверждение_претензионной_работы...CTP#realfile.pdf
|
||
5. ✅ 11_2_Подтверждение_претензионной_работы...CTP#realfile.pdf
|
||
|
||
### 🎯 Бонус: решена проблема ошибки 500!
|
||
|
||
Оказалось, что **ошибка 500 от прокси-сервера возникала из-за этих недостающих файлов**:
|
||
- JSON указывал 21 файл, но реально отправлялось только 16
|
||
- Система обнаруживала несоответствие и возвращала ошибку 500
|
||
- После исправления все 21 файл загрузились → получен номер **41RS0001-201-25-0001140** ✅
|
||
|
||
---
|
||
|
||
**Статус:** ✅ Проблема полностью решена и проверена на реальном проекте
|
||
|