Files
crm.clientright.ru/SEND2COURT_S3_URL_FIX.md
Fedor ac7467f0b4 Major CRM updates: AI Assistant, Court Status API, S3 integration improvements, and extensive file storage system
- 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.
2025-10-16 11:17:21 +03:00

5.6 KiB
Raw Permalink Blame History

Исправление проблемы с символом # в 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

Статус: Проблема полностью решена и проверена на реальном проекте