feat: OnlyOffice Document Server integration with auto-save
- Добавлен s3Path в callbackUrl для сохранения в оригинальный файл - Исправлено сохранение: теперь файлы обновляются в S3 автоматически - Отключена проверка SSL в OnlyOffice (rejectUnauthorized: false) - Разрешены callback на приватные IP адреса - Добавлено логирование callback в onlyoffice_callback.log - Восстановлены оптимальные настройки индексации Nextcloud - filesystem_check_changes = 0 для S3 External Storage - Redis event system работает для автоматической индексации Документация: - ИСПРАВЛЕНИЕ_СОХРАНЕНИЯ_ONLYOFFICE_01_11_2025.md - ИСПРАВЛЕНИЕ_SSL_ONLYOFFICE_01_11_2025.md - ВОССТАНОВЛЕНИЕ_ОПТИМИЗАЦИИ_01_11_2025.md - ONLYOFFICE_НАСТРОЙКИ.md - ТЕСТИРОВАНИЕ_СОХРАНЕНИЯ_ONLYOFFICE.md
This commit is contained in:
@@ -9,6 +9,8 @@ EnvLoader::load('/var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/.e
|
||||
|
||||
error_reporting(E_ALL);
|
||||
ini_set('display_errors', 0);
|
||||
ini_set('log_errors', 1);
|
||||
ini_set('error_log', '/var/www/fastuser/data/www/crm.clientright.ru/crm_extensions/file_storage/onlyoffice_callback.log');
|
||||
|
||||
// Логируем все запросы
|
||||
$input = file_get_contents('php://input');
|
||||
@@ -43,12 +45,17 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($data)) {
|
||||
|
||||
error_log("Downloaded file: " . strlen($fileContent) . " bytes");
|
||||
|
||||
// Извлекаем путь к файлу из documentKey
|
||||
// В $key хранится md5($s3Path . '_' . $version)
|
||||
// Нам нужен оригинальный путь, который мы должны хранить отдельно
|
||||
// Получаем оригинальный путь файла из query параметра
|
||||
$s3Path = $_GET['s3Path'] ?? null;
|
||||
|
||||
// ВРЕМЕННО: Сохраняем в отдельную папку в S3 для отладки
|
||||
// TODO: Нужно связать documentKey с оригинальным путём файла
|
||||
if (!$s3Path) {
|
||||
error_log("ERROR: s3Path not provided in callback URL!");
|
||||
// Fallback: сохраняем во временную папку
|
||||
$s3Path = 'onlyoffice_saved/' . $key . '_' . date('Y-m-d_H-i-s') . '.docx';
|
||||
error_log("Using fallback path: " . $s3Path);
|
||||
} else {
|
||||
error_log("Saving to original path: " . $s3Path);
|
||||
}
|
||||
|
||||
// Инициализируем S3 клиент
|
||||
$s3Client = new Aws\S3\S3Client([
|
||||
@@ -65,14 +72,18 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($data)) {
|
||||
|
||||
$bucket = 'f9825c87-4e3558f6-f9b6-405c-ad3d-d1535c49b61c';
|
||||
|
||||
// ВРЕМЕННОЕ РЕШЕНИЕ: Сохраняем в папку /onlyoffice_saved/
|
||||
$savedPath = 'onlyoffice_saved/' . $key . '_' . date('Y-m-d_H-i-s') . '.docx';
|
||||
// Сохраняем в ОРИГИНАЛЬНОЕ место!
|
||||
$savedPath = $s3Path;
|
||||
|
||||
// Определяем Content-Type на основе расширения файла
|
||||
$contentType = getContentType($savedPath);
|
||||
error_log("Content-Type: " . $contentType);
|
||||
|
||||
$result = $s3Client->putObject([
|
||||
'Bucket' => $bucket,
|
||||
'Key' => $savedPath,
|
||||
'Body' => $fileContent,
|
||||
'ContentType' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
|
||||
'ContentType' => $contentType
|
||||
]);
|
||||
|
||||
error_log("File saved to S3: " . $savedPath);
|
||||
@@ -99,5 +110,21 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST' && !empty($data)) {
|
||||
// Для всех остальных запросов - 200 OK
|
||||
http_response_code(200);
|
||||
echo json_encode(['error' => 0]);
|
||||
|
||||
/**
|
||||
* Определяет Content-Type на основе расширения файла
|
||||
*/
|
||||
function getContentType($filename) {
|
||||
$ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
|
||||
$types = [
|
||||
'doc' => 'application/msword',
|
||||
'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
||||
'xls' => 'application/vnd.ms-excel',
|
||||
'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
||||
'ppt' => 'application/vnd.ms-powerpoint',
|
||||
'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation'
|
||||
];
|
||||
return $types[$ext] ?? 'application/octet-stream';
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user