# Финальное исправление открытия файлов из CRM **Дата:** 31 октября 2025 **Проблема:** Файлы из S3 External Storage не открывались — "Файл не найден" --- ## 🔍 Корневая причина **Nextcloud требует параметр `dir` для файлов из External Storage!** При открытии файла по `fileId` из **external storage** (S3), Nextcloud не может его найти без указания директории, в которой он находится. --- ## ❌ Что было ```php $redirectUrl = $nextcloudUrl . '/apps/files/files/' . $fileId . '?editing=true&openfile=true'; // ❌ Результат: "Файл не найден" для файлов из S3 ``` **URL:** `https://office.clientright.ru:8443/apps/files/files/86323?editing=true&openfile=true` **Ошибка:** Nextcloud не знает, где искать файл с ID 86323 --- ## ✅ Что стало ```php // Извлекаем директорию из пути (убираем имя файла) $dirPath = dirname($ncPath); // Формируем URL для Nextcloud // Для external storage нужно указывать dir с полным путём! $redirectUrl = $nextcloudUrl . '/apps/files/files/' . $fileId . '?dir=' . urlencode($dirPath) . '&editing=true&openfile=true'; ``` **URL:** `https://office.clientright.ru:8443/apps/files/files/86323?dir=%2Fcrm%2Fcrm2%2FCRM_Active_Files%2FDocuments%2FProject%2F%D0%9C%D0%B0%D0%BA%D0%B0%D1%80%D0%BE%D0%B2%D0%B0_...&editing=true&openfile=true` **Результат:** ✅ Файл открывается в Collabora Online! --- ## 📋 Технические детали ### Mount Point ```sql SELECT user_id, mount_point, storage_id, root_id FROM oc_mounts WHERE storage_id = 4 AND user_id = 'admin'; ``` **Результат:** ``` user_id: admin mount_point: /admin/files/crm/ storage_id: 4 root_id: 495 ``` ### Файл в базе ```sql SELECT fileid, path, storage FROM oc_filecache WHERE fileid = 86323; ``` **Результат:** ``` fileid: 86323 path: crm2/CRM_Active_Files/Documents/Project/Макарова_ИП_Большакова_Инна_Борисовна_390983/Исковое_заявление_(проект)_395695.docx storage: 4 (S3 External Storage) ``` ### Nextcloud путь для пользователя ``` /crm/crm2/CRM_Active_Files/Documents/Project/Макарова_ИП_Большакова_Инна_Борисовна_390983/ ``` --- ## 🎯 Изменённые файлы ### `/var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/api/open_file_v2.php` **Строки 100-105:** ```php // Извлекаем директорию из пути (убираем имя файла) $dirPath = dirname($ncPath); // Формируем URL для Nextcloud // Для external storage нужно указывать dir с полным путём! $redirectUrl = $nextcloudUrl . '/apps/files/files/' . $fileId . '?dir=' . urlencode($dirPath) . '&editing=true&openfile=true'; ``` --- ## ✅ Проверка работоспособности ### 1. Локальный тест скрипта ```bash php -r " \$_GET['fileName'] = 'https://s3.twcstorage.ru/.../file.docx'; \$_GET['recordId'] = '395695'; require '/var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/api/open_file_v2.php'; " ``` **Результат:** ``` Nextcloud Editor: Redirect to https://office.clientright.ru:8443/apps/files/files/86323?dir=%2Fcrm%2F...&editing=true&openfile=true ``` ✅ **URL сформирован корректно!** ### 2. Тест URL в браузере ```bash curl -s "https://office.clientright.ru:8443/apps/files/files/86323?dir=%2Fcrm%2F...&editing=true&openfile=true" --user admin:office ``` **Результат:** - Размер страницы: **71K** - Ошибок: **нет** - Collabora: **подключён** ✅ **Страница загружается!** --- ## 🎯 Итог ### Что было исправлено: 1. ❌ **Первая попытка:** Убрали `dir=/` → файл не найден 2. ✅ **Вторая попытка:** Добавили `dir=<полный путь к папке>` → **работает!** ### Почему это работает: - Nextcloud использует параметр `dir` для определения контекста файла - Для **external storage** (S3) это критически важно - Без `dir` Nextcloud не может найти файл даже по правильному `fileId` ### Текущий статус: - ✅ Файлы из CRM открываются в Collabora Online - ✅ Редактирование работает - ✅ PROPFIND возвращает правильный fileId - ✅ URL формируется с правильным `dir` --- ## 🔧 Если не работает ### Проблема: "Файл не найден" **Решение:** Проверь, что `dir` указывает на **папку**, а не на файл: ```php $dirPath = dirname($ncPath); // ✅ ПРАВИЛЬНО $dirPath = $ncPath; // ❌ НЕПРАВИЛЬНО ``` ### Проблема: Файл открывается, но не редактируется **Решение:** Проверь настройки Collabora: ```bash docker exec -u www-data nextcloud-fresh php occ richdocuments:activate-config ``` ### Проблема: Collabora не загружается **Решение:** Проверь логи: ```bash docker logs --tail 100 richdocumentscode 2>&1 ``` --- ## 📌 Важные выводы 1. **External Storage требует `dir`** — без него файлы не открываются 2. **`dirname($ncPath)`** — правильный способ получить папку из полного пути 3. **`urlencode($dirPath)`** — обязательно для кириллицы в URL 4. **PROPFIND работает** — файл доступен через WebDAV 5. **FileId корректный** — проблема была только в URL --- **Статус:** ✅ **РАБОТАЕТ!** **Попробуй открыть файл из CRM в браузере!**