Перейти к содержанию

Файлы — Администрирование

Операционные настройки файлового домена для администратора: файловое хранилище категории (квоты, разделы Диска, привязка папок), провайдеры хранения файлов (типы, подключение MSSQL- и S3-хранилищ, сжатие данных), видеоконвертация (потоки, TSQL/Lua-паттерны), утилита TaskScanner, Office Web Apps (устарел, удалён в .NET Core), appsettings и CustomSettings. Cross-link на журнал действий — в домене disk.

Файловое хранилище категории

Файлы, с которыми ведётся работа в системе, хранятся либо на Диске, либо в таблицах БД.

Разделы Диска и системные папки

Стандартные разделы Диска и их назначение:

Раздел Назначение Доступ
Мои файлы Личные файлы пользователя Только пользователь и прямые руководители. Скрывается, если общая настройка Квота личной папки пользователя в файловом хранилище = 0 или не задана
Общие файлы Совместное использование Всем сотрудникам компании (признак регулируется в настройках профиля). Права на подпапки наследуются по умолчанию
Обмен файлами Обмен между сотрудниками и внешними пользователями Доступен с версии 2.263. По умолчанию только владелец и администраторы; остальным — по явному назначению
Файлы автоматизации Папки, привязанные к задачам через смарт-автоматизацию Только сотрудники с правами администратора. Системная подпапка Export configurations — выгрузка конфигурации площадки
Файлы замещаемых Содержимое «Моих файлов» замещаемых сотрудников Отображается при настроенном замещении
Файлы подчиненных Содержимое «Моих файлов» подчинённых Отображается для руководителей

Разделы Диска: «Мои файлы», «Общие файлы», «Обмен файлами» и «Файлы автоматизации»

  • Системные корни Диска (служебные разделы) используются платформой как специальные корневые узлы и не должны изменяться напрямую на уровне данных.
  • ⚠️ Не создавайте папки, имя которых в корне раздела состоит только из цифр — это может привести к конфликту со служебной маршрутизацией и некорректному открытию папки по ссылке. Для таких случаев переименуйте папку в текстовое имя или используйте имя, содержащее не только цифры.
  • Адрес в браузере формируется из названий папок, а не из внутренних идентификаторов. Если папка переименована, старая текстовая ссылка может перестать работать.

Ограничение выбора групп «сотрудники / несотрудники»

В диалоге назначения прав на папку Диска (DiskAccessAddDialogComponent) выбор групп-получателей теперь фильтруется по типу папки. Для типов IStorageFolderType.PublicFolder («Общие файлы»), SubordinatesFolders («Файлы подчинённых») и SubstitutedPrincipalsFolders («Файлы замещаемых») в поиске получателей используется критерий ISearchCriteriaType.userIsEmployeeCriteria вместо общего userCriteria — эти разделы предназначены только для сотрудников компании, поэтому группы, состоящие из несотрудников (например, внешние пользователи «Обмена файлами»), в подсказках выбора не появляются и права им назначить нельзя. Для остальных типов папок (в т.ч. Обмен файлами, Мои файлы, Файлы автоматизации) действует прежний критерий userCriteria — доступны любые группы.

Квота, привязка папки и права в связанных папках

Параметры файлового хранилища пользователя:

Параметр Значение по умолчанию Где хранится
Квота личной папки пользователя 5 Гб (5368709120 байт) Settings.FileStorageUserPartitionQuota

Квота распространяется на все файлы в любых разделах Диска, для которых пользователь является владельцем. Файлы в задачах и чатах не учитываются.

Для создания единого места хранения всех файлов задачи (вложения задачи + ДП) используется смарт-действие Связать файловую папку с задачей.

  • Путь к папке задаётся фиксированным значением или смарт-выражением.
  • ⚠️ «Привязанные» папки всегда создаются в разделе Файлы автоматизации. Не используйте для этого раздел Общие файлы.
  • После привязки все файлы, вложенные в задачу или в ДП, попадают в связанную папку.

Альтернативный сценарий: сначала файлы вкладываются в привязанную папку на Диске, а затем загружаются в соответствующие ДП. Для этого в ДП «Файл» необходимо разрешить загрузку из Диска. Чтобы ограничить загрузку только из привязанной папки, отключите возможность загрузки из файловой системы.

Если связь настроена, в ДП «Файл» появляется пункт Вставить из диска — он открывает связанную с задачей папку.

При создании связи задачи с папкой Диска пользователям предоставляются права, эквивалентные правам в задаче. Права формируются на основе:

  1. Прав доступа для групп на категорию:
  2. «Исполнять» + пользователь является исполнителем текущей задачи
  3. «Создавать задачи» + пользователь является заказчиком текущей задачи
  4. «Просмотр всех задач"
  5. Прав согласно тегам или смарт-доступу
  6. Прав согласно роли в задаче: подписчик, заказчик, исполнитель или активный заместитель

Подписчик получает права при добавлении и теряет при удалении из подписчиков.

Пользователь получает право на просмотр и редактирование папки, если хотя бы по одному из прав видит связанную задачу. Если все связанные задачи завершены — редактирование папки запрещено.

Доступ к Диску и проверка производительности хранилища

По умолчанию Диск доступен всем. Видимость для определённых групп настраивается опцией Функции Диска в настройках рабочего места группы. Настройка влияет на:

  • пункт «Диск» в меню сервисов в панели навигации
  • пункт «Диск» в меню «Файлы» карточки задачи
  • возможность совершать действия с Диском для ДП «Файлы"

Для бенчмарка используется хранимая процедура DiskSpeedBenchmark:

  1. Создаёт временную таблицу Test_PreUploadedOnPostTaskFiles (если не существует).
  2. Готовит тестовый блок данных объёмом 200 МБ.
  3. Измеряет время записи блока в таблицу (результат в миллисекундах выводится в сообщениях SQL Server).
  4. Измеряет время чтения только что записанных данных.
  5. По завершении теста временная таблица удаляется.

Эскалация прав через «Обмен файлами» (исправлено в 2.268.360)

В классе FileExchangeFolder метод GetUserPermissionsForFiles ранее агрегировал в allPerm весь набор permissions.AllPermissions без проверки членства, поэтому текущему userId подмешивались флаги прав, выданных другим пользователям и группам. На практике это давало эскалацию прав в разделе Обмен файлами.

Исправлено фильтром по членству — учитываются только строки ACL, где p.UserId == userId либо p.GroupId входит в UserGroupsCache.Get(userId).Groups (симметрично GetFolderPermissionsForUser).


Провайдеры хранения файлов

Файлы, загружаемые в систему и вкладываемые в задачи, физически хранятся через провайдер загружаемых файлов — именованную конфигурацию хранилища. Провайдеров может быть несколько; новые файлы записываются через тот, который выбран в настройке «Вкладывать новые файлы через провайдер».

Где настраивается: Администрирование → Подключения → Провайдеры файлов (~/spa/administration/file-providers); требуются права администратора. Admin API — /api/admin/fileproviders. Таблица БД: dbo.FileProviders; провайдер, через который пишутся новые файлы, помечен в ней флагом UseToWriteFiles.

На странице три элемента: кнопка «Создать» для добавления провайдера, выпадающий список «Вкладывать новые файлы через провайдер» с собственной кнопкой «Сохранить» (именно он определяет, куда пишутся новые файлы) и таблица настроенных провайдеров — клик по строке открывает настройки провайдера.

Поддерживаемые типы (FileProviderTypes):

Значение Тип Хранилище
1 MSSQL MS SQL varbinary с полнотекстовым поиском
2 MSSQLNoFulltextSearch MS SQL без полнотекстового поиска
3 Sharepoint Интеграция с SharePoint
4 MSSQLFileStreamProvider MS SQL FileStream
5 MSSQLWithTextContent MS SQL с текстовым содержимым
6 PostgreSQL PostgreSQL bytea
7 S3 S3-совместимое хранилище (MinIO, AWS)

Список провайдеров загружаемых файлов и настройка «Вкладывать новые файлы через провайдер»

Провайдер, выбранный в настройках категории или в ДП «Файл», удалить нельзя: система вернёт ошибку «Невозможно удалить провайдер, так как он используется» с перечнем категорий — сначала нужно убрать связь.

Создание провайдера

Новый провайдер добавляется кнопкой «Создать»: выбирается тип, задаётся имя и параметры подключения. Состав полей формы зависит от выбранного типа. Готовые сценарии для двух основных вариантов — MS SQL и S3 — приведены ниже.

Форма добавления провайдера: выбор типа и параметров подключения

⚠️ В PostgreSQL тип bytea физически не хранит объекты больше 1 ГБ — это внутреннее ограничение самого типа данных.

Параметры провайдера для SQL-хранилищ

Чтобы изменить провайдер, откройте его из списка, внесите правки и нажмите «Сохранить». Кнопка «Проверить соединение и сохранить» предварительно выполняет select-запрос к указанной БД и проверяет корректность параметров.

Окно редактирования настроек провайдера загружаемых файлов

Поле Описание
Имя Название провайдера
Сжимать данные Данные сжимаются, если тип провайдера поддерживает сжатие
Строка подключения Основа подключения. Если оставить пустой, провайдер работает с основной базой приложения (TCConnectionString)
Имя таблицы Таблица, в которой хранятся файлы
Имя колонки для содержимого файла Колонка с содержимым файлов
Имя колонки для идентификатора файла Колонка с идентификаторами файлов
Имя колонки для расширения файла Колонка с расширениями файлов
Имя БД, Сервер, Логин, Пароль Переопределяют соответствующие части строки подключения (Initial Catalog, Data Source, User ID, Password); пароль на форме скрыт
Порт Применяется только для провайдера PostgreSQL (по умолчанию 5432). Для MS SQL порт задаётся внутри строки подключения

⚠️ Поля «Имя БД», «Сервер», «Логин», «Пароль» — не замена строки подключения, а переопределение её частей. Если строка подключения пуста, эти поля не применяются: провайдер использует основную базу приложения, даже когда сервер и имя БД заполнены.

Параметры строки подключения: Data Source (адрес сервера БД), Initial Catalog (имя БД), Persist Security Info, User ID, Password, packet size (размер сетевого пакета), Max Pool Size и Min Pool Size (пул соединений), Connect Timeout, MultipleActiveResultSets (по умолчанию выключено), Encrypt (шифрование соединения).

Подключение MS SQL-хранилища: порядок

Предусловия: права администратора в 1Форме; сетевой доступ от сервера приложения до SQL-сервера; учётная запись SQL с правами на чтение и запись в целевой таблице.

  1. Создать базу данных для файлов. Рекомендуется отдельная БД под вложения — её можно разместить и на отдельном SQL-сервере (быстрые диски не требуются). Типовой скрипт создания называется CreateTaskFilesDB и запрашивается у поддержки 1Формы. Отдельная БД не обязательна: если оставить строку подключения пустой, провайдер будет работать с основной базой приложения (TCConnectionString) — тогда шаг сводится к созданию таблицы в ней.

  2. Выбрать тип провайдера. От типа зависит поиск по содержимому вложений и состав таблицы из следующего шага, поэтому определиться нужно до её создания:

Тип Когда выбирать Что учесть
MSSQL (1) Нужен полнотекстовый поиск по содержимому вложений средствами SQL Server Базовый вариант с полнотекстовым поиском
MSSQLNoFulltextSearch (2) Поиск по содержимому вложений не нужен То же хранение, без полнотекстового поиска
MSSQLWithTextContent (5) Поиск по вложениям выполняется через Sphinx При загрузке извлекает текст файла в дополнительную колонку TextContent — имя фиксированное, задать другое в форме нельзя
MSSQLFileStreamProvider (4) Содержимое хранится через механизм SQL Server FileStream Требует поддержки FileStream на стороне SQL-сервера
  1. Создать таблицу для файлов. Имена таблицы и колонок произвольные — они указываются в форме провайдера. Минимальный состав:
Поле Тип Обязательность
Идентификатор файла int, identity обязательно — провайдер разбирает идентификатор файла как целое число
Содержимое файла varbinary(max) обязательно
Расширение файла varchar опционально
TextContent текстовый только для типа MSSQLWithTextContent; имя колонки фиксированное

Пример для типов 1, 2 и 4 (имена — на своё усмотрение):

CREATE TABLE TaskFilesStorage (
    FileID   int IDENTITY(1,1) PRIMARY KEY,
    FileBody varbinary(max) NOT NULL,
    FileExt  varchar(50) NULL
);
  1. Создать провайдер кнопкой «Создать»: задать имя, выбрать тип из шага 2 и заполнить строку подключения к созданной БД; при необходимости уточнить её части полями «Сервер», «Имя БД», «Логин», «Пароль». Указать имя таблицы и имена колонок из шага 3.

⚠️ Если файлы должны лежать в отдельной БД, строку подключения заполнять обязательно: заполненных полей «Сервер» и «Имя БД» недостаточно — при пустой строке подключения провайдер молча использует основную базу приложения.

  1. Нажать «Проверить соединение и сохранить». Система выполнит select-запрос к указанной таблице; ошибка на этом шаге означает, что неверны параметры подключения, имена таблицы/колонок или прав учётной записи недостаточно.

  2. Переключить запись новых файлов: на странице провайдеров выбрать созданный провайдер в списке «Вкладывать новые файлы через провайдер» и нажать «Сохранить» рядом с этим списком.

  3. Проверить результат: вложить файл в любую задачу и убедиться, что в таблице из шага 3 появилась новая строка.

Параметры провайдера S3

При выборе типа S3 форма перестраивается под параметры объектного хранилища.

Настройки провайдера S3: endpoint, бакет, ключи доступа, шаблон имени файла

Поле Настройка Описание
URL сервиса S3 Endpoint Адрес конечной точки хранилища. Указывается обязательно со схемой (http:// или https://); значение без схемы считается некорректным и не проходит проверку соединения при сохранении. Важно: если площадка 1Формы работает по HTTPS, для этого поля (и для «Внешнего URL сервиса S3», если он используется) рекомендуется тоже использовать https:// — система это не проверяет автоматически. При несовпадении схем возможны ошибки уже при использовании: браузер блокирует скачивание файлов (смешанный контент), а обращения к хранилищу могут завершаться ошибкой протокола на стороне самого S3.
Внешний URL сервиса S3 ExternalEndpoint Публичный URL доступа к файлам, если отличается от основного. Если 1Форма работает по HTTPS, этот URL тоже должен использовать https:// — по тем же причинам, что и «URL сервиса S3».
Бакет S3 BucketName Корзина, в которой хранятся файлы
Ключ доступа S3 AccessKey Access Key ID
Секретный ключ S3 SecretKey Secret Access Key
Регион S3 Region Регион расположения бакета
Шаблон имени файла S3 FileNamingPattern Шаблон генерации имён объектов в бакете
Использовать пути вместо хоста ForcePathStyle Включено по умолчанию — path-style: {endpoint}/{бакет}/{путь к объекту}. Выключено — virtual-hosted style: имя бакета включается в адрес хоста
Доп. настройки S3 (JSON) ExtSettings Дополнительные параметры в формате JSON; ключ LifetimeInMinutes задаёт срок жизни объектов

Переменные шаблона имени: {uid} — уникальный UUID (исключает коллизии имён), {filename} — исходное имя файла при загрузке, {providerid} — ID провайдера. Если шаблон не задан, применяется default-dir/{uid}-{filename}.

Подключение S3-хранилища: порядок

Предусловия: права администратора в 1Форме; сетевой доступ от сервера приложения до endpoint хранилища; доступ к консоли S3-хранилища для создания бакета и ключей.

  1. В консоли S3-хранилища создать бакет для файлов. Версионирование для файлового бакета включать не обязательно.
  2. Создать сервисный аккаунт (Access Key) и записать Access Key ID и Secret Key.
  3. Создать провайдер типа S3 и заполнить форму:
Поле Значение
Тип S3
Имя Произвольное название
URL сервиса S3 https://<адрес-хранилища> — обязательно со схемой
Внешний URL сервиса S3 Публичный адрес, если он отличается от основного; иначе совпадает с ним
Бакет S3 Имя бакета из шага 1
Ключ доступа S3, Секретный ключ S3 Значения из шага 2
Регион S3 Для MinIO не требуется — оставить пустым
Шаблон имени файла S3 files/{uid}-{filename} — все файлы в «папке» files/, имена уникальны
Использовать пути вместо хоста Включить: для MinIO обязателен path-style
  1. Нажать «Проверить соединение и сохранить» — при успехе провайдер появится в списке.
  2. На странице провайдеров выбрать созданный провайдер в списке «Вкладывать новые файлы через провайдер» и нажать «Сохранить» рядом с этим списком: новые файлы будут записываться в S3.
  3. Проверить результат: вложить файл в любую задачу и убедиться, что в бакете появился объект с именем по заданному шаблону.

⚠️ Файловый провайдер S3 и механизм докачки TUS используют разные бакеты, даже если работают с одним сервером. При загрузке файл сначала попадает во временный бакет TUS, а при вложении в задачу копируется в бакет файлового провайдера. Ключи TUS — в разделе «appsettings.json и CustomSettings» ниже.

Что происходит с уже загруженными файлами

Переключение настройки «Вкладывать новые файлы через провайдер» меняет только то, куда пишутся новые файлы. Уже загруженные вложения остаются в том провайдере, через который были загружены, и продолжают открываться: у каждого файла хранится ссылка на свой провайдер (FileProviderID) и ключ файла внутри него. Массового переноса содержимого при переключении не происходит.

⚠️ Поэтому прежний провайдер нужно оставить подключённым и работоспособным — иначе ранее загруженные вложения перестанут открываться. Система защищает от части таких ошибок: провайдер, выбранный в настройках категории или в ДП «Файл», удалить нельзя.

Сжатие данных в провайдере

Кнопка «Сжать данные в файл провайдере» выполняет однократное массовое сжатие уже хранимых данных — для перехода к работе в режиме сжатия; далее файлы сжимаются при вложении. Сжатие работает, только если его поддерживает выбранный тип провайдера.

Плюс сжатия — файлы занимают меньше места. Минус — не работает поиск по содержимому текстовых файлов, а изображения не выводятся в отчётах FastReport.

⚠️ Для провайдера типа PostgreSQL компрессию включать не нужно: PostgreSQL использует собственный механизм хранения со встроенным сжатием на уровне таблиц (TOAST), и дополнительное сжатие на уровне провайдера заметного выигрыша не даёт.

Сохранить поиск по содержимому при включённом сжатии позволяет задание по таймеру TikaJob — оно извлекает текст вложений в абстракты. Для его работы нужно добавить сервис Tika и выбрать его в общих настройках приложения; список обрабатываемых форматов задаётся в настройках самого сервиса (AllowedFileTypes). С 01:00 до 05:00 по времени сервера задание выполняет полный скан необработанных файлов, в остальное время разбирает их порциями.

⚠️ Провайдер можно пометить как архивный (флаг IsArchive в dbo.FileProviders). При поиске по вложениям такие провайдеры по умолчанию пропускаются: файлы в них остаются доступными, но в результаты поиска не попадают.

Рекомендации по файловым БД

  • Регулярно заводить новые БД для вложенных файлов; размер каждой — не более 100–200 ГБ.
  • Оптимизация БД основного файлового провайдера (dbcc checkdb) упрощает резервное копирование и работу системного задания CheckDefaultFileDatabaseJob.
  • Файловые БД можно размещать на отдельных SQL-серверах; быстрые диски для них не требуются.

Импорт Excel в базу данных

Импорт данных из Excel-файла в таблицу рабочей базы — через endpoint POST api/files/import/exceltodb или смарт-действие «Импортировать лист Excel в таблицу БД» — доступен только администраторам. Проверка прав выполняется и на endpoint, и в сервисе импорта (ExcelToDatabaseImportService), поэтому запуск через смарт-действие тоже отсекает не-администраторов.

Имена таблицы и колонок валидируются: отклоняются пустые, длиннее 128 символов и содержащие служебные символы SQL-разметки; обычные заголовки Excel (кириллица, пробелы, дефисы, точки, скобки, запятые и др.) проходят.

Если импорт был настроен от имени сервисной или не-административной учётной записи, переведите его на учётную запись администратора — иначе он перестанет выполняться.

Текущие ограничения на PostgreSQL. Квалифицированные имена вида схема.таблица могут завершаться ошибкой — используйте имя без явной схемы. Лимит длины идентификатора ниже, чем на MS SQL: 63 байта UTF-8 против 128 символов. Кириллический символ в UTF-8 занимает 2 байта, поэтому кириллический заголовок ограничен примерно 31 символом. Имена таблиц и колонок, превышающие лимит, отклоняются при загрузке с ошибкой (не обрезаются) — иначе из-за усечения два разных заголовка могли бы схлопнуться в одну колонку.

Видеоконвертация — операционные параметры

Поддерживаемые форматы входящих файлов: MP4, WMV, MOV, AVI. На выходе — единый MP4 для веб-плеера. Обработка выполняется внешним микросервисом конвертации через защищённое API-соединение.

Архитектура решения

Решение построено на очередях событий:

  1. Создаются два потока (video-convertation и video-convertation-callback) и две очереди событий.
  2. Регистрируется сервис типа UniversalApi для взаимодействия с микросервисом.
  3. К очереди отправки привязывается смарт-действие «Вызов внешнего сервиса» (передаёт FileID).
  4. К очереди ответа привязывается Lua-скрипт, который через действие «Скачать файл» (DownloadFile) забирает конвертированный файл и вкладывает его в задачу.
  5. В категории настраивается автоматизация «Добавить событие в очередь» на событие изменения ДП.

Для ДП, используемого для сжатия, Мультифайл должен быть отключён и не должен быть выбран файловый провайдер.

Настройки ДП «Файл»: переключатель «Мультифайл», который для сжатия должен быть отключён

Параметры потоков, TSQL и Lua-скрипт

Параметры обработки очереди видеоконвертации:

Параметр Значение
Неудачных попыток до прекращения обработки события 1
Поведение в случае ошибки Пропустить

В смарт-действии Вызов внешнего сервиса (привязка к очереди отправки) параметр fileId рассчитывается из контекста очереди:

SELECT JSON_VALUE(data, '$.fileId')
FROM MessageQueue WITH (NOLOCK)
WHERE id = @contextid

В параметре Список файлов формат: ключ file → значение fileId (рассчитанное TSQL-запросом выше).

В привязке к очереди ответа (video-convertation-callback-action) используется смарт-действие Выполнить смарт-скрипт с действием DownloadFile.

Контекстные параметры:

Параметр Значение
@contextid nil
@contextType 'task'
FileName 'Converted file.mp4' (расширение .mp4 обязательно)
HttpHeaders { 'Authorization' = 'Bearer {APIKey из сервиса UniversalApi}' }
HttpMethod 'Post'

Пример скрипта:

local paramTable = SQL:query_one([[
    select JSON_VALUE(data, '$.CallBackUrl') callbackurl
    from MessageQueueLog with(nolock)
    where id = @contextid
]], {contextid = CONTEXT.Id})

SMART:execute_action('DownloadFile', nil, 'task', {
    Task = 12345,
    UploadingUserName = 3,
    FileLink = paramTable.callbackurl,
    FileName = 'Converted file.mp4',
    HttpMethod = 'Post',
    HttpHeaders = { 'Authorization' = 'Bearer {APIKey}' }
}, false)

APIKey берётся из настроек сервиса UniversalApi, созданного на шаге 3 архитектурной настройки.

Настройка автоматизации в категории

В категории создаётся автоматизация со смарт-действием Добавить новое событие в очередь:

Параметр Значение
Тип события Custom
Поток video-convertation (созданный на шаге 1)
Пользовательское действие ID очереди video-convertation-action (созданной на шаге 2)
Событие триггера После смены ДП
Параметр fileId Рассчитывается TSQL из ДП «Файл"

⚠️ Ограничения для ДП «Файл», используемого в сжатии:

  • Опция Мультифайл должна быть отключена
  • Файловый провайдер не должен быть выбран

Утилита TaskScanner

Утилита сканирования TaskScanner позволяет сканировать документы и загружать электронные образы непосредственно в задачу (в ДП «Файл»).

В прежних версиях утилита доступна для загрузки на странице «Прочие настройки». В настоящее время ссылка в интерфейсе системы удалена; утилита поставляется в виде .zip-архива в служебной категории Репозиторий версий приложения.

Чтобы отсканированный файл можно было вложить в ДП «Файл», в настройках ДП должен быть включён параметр Разрешить сканирование (AllowScanning). Подробнее см. ../ext-params/file/settings-reference.md.

Ключ Формат / Значения Описание
PageSize A3, A4, A5 или Ширина×Высота в мм (например, 10x297) Размер страницы
Dpi Целое число, например 300 Разрешение сканирования
BitDepth Color, Grayscale, BlackAndWhite Цветовой режим
PageAlign Right, Center, Left Выравнивание страницы

Журнал «Диск» — см. ../disk/admin.md.

Активируется опцией Логировать действия с файлами в настройках ДП «Файл» / «Таблица» (см. также ../ext-params/file/settings-reference.md).

Фиксируемые действия: загрузка файла, удаление файла, создание папки, удаление папки, изменение прав доступа, изменение названия папки и т.д.


Office Web Apps / Office Online — настройки сервера (устарело)

Office Web Apps Server удалён из платформы после миграции на .NET Core. Параметры ниже остаются в общих настройках приложения для совместимости со старыми инсталляциями, но в актуальной сборке не оказывают эффекта. Для онлайн-просмотра и редактирования документов используйте Р7-Офис (OfficeOnlineEditor.editor=r7) или OnlyOffice CE (OfficeOnlineEditor.editor=OnlyOffice) — см. администрирование интеграций (раздел «Онлайн-редакторы: MS Office Online и OnlyOffice CE»). Эксплуатационный документ для старых стендов с OWA устарел вместе с самим механизмом.

Cross-link. Архитектура и CustomSettings ключи редакторов (OfficeOnlineEditor, r7/onlyOffice) — в ../integrations/admin.md (разделы «MS Office Online (webApps)» и «OnlyOffice CE»). Здесь — параметры серверной настройки Office Web Apps в общих настройках приложения.

Где настраивается: Общие настройки приложения, блок Web Apps.

Параметр Назначение
Использовать Office Web Apps для просмотра документов в браузере Включает онлайн-просмотр документов через Web Apps
Использовать Office Web Apps для редактирования документов в браузере Включает онлайн-редактирование
Сервер для получения файлов из Office Web Apps URL вида http://web_apps — адрес WAC-сервера, через который Web Apps запрашивает контент у 1Формы
Тип зоны Внешняя / внутренняя. Соответствует зонам в Discovery.xml. Внешняя — для публикаций через Интернет, внутренняя — для локальной сети
Путь к Discovery.xml Путь к файлу настроек Web Apps относительно каталога приложения, должен начинаться с корня или wwwroot
Время жизни токена (сек.) Таймаут на запрос файла со стороны Web Apps по сгенерированному при открытии токену безопасности
~~Использовать WebDAV~~ Устаревшее, WebDAV больше не используется
Действие с файлами MS Office при клике Скачать / Открыть для просмотра в веб-интерфейсе / ~~Открыть для редактирования в десктопном приложении (WebDAV)~~

⚠️ Для запуска редактора Office Online (OfficeOnlineEditor.editor=webApps) дополнительно требуется WOPI-discovery в корне веб-сервера: C:\inetpub\wwwroot\{App}\wopi. Без этого файла редактор не откроется.


appsettings.json и CustomSettings — ключи файлов

Ключи серверной конфигурации и CustomSettings, влияющие на работу с файлами:

Ключ Тип Назначение
UseDevexpressDocToPdfConverter bool Использовать DevExpress для конвертации DOC→PDF. Проверяется, если не задан CustomSetting DefaultConverterPdf. Если ни ключ, ни пользовательская настройка не заданы — по умолчанию используется SautinSoft
Ключ Тип / Default Назначение
Tus.PreuploadEnabled bool Включает механизм предварительной загрузки. При true сервер ждёт preupload-запросы перед основной передачей файла
Tus.PreuploadEnpoint string (URI) Конечная точка preupload-запросов. Пример: /files/tus/preupload
Tus.FileExpirationInHours int / null TTL загруженного файла в часах. По истечении — удаляется джобом CleanExpiredFilesFromPreuploadedTusStoreJob. null — не удалять
Tus.StoreType Local / S3 Тип хранилища временных файлов
Tus.Local.Path path Путь хранения для StoreType=Local. Пример: D:/tus/
Tus.S3.BucketName string Имя бакета S3
Tus.S3.Region string Регион (us-east-1 для совместимости с MinIO)
Tus.S3.Endpoint URL Endpoint S3 / MinIO
Tus.S3.ForcePathStyle bool true — path-style URL (<endpoint>/<bucket>/<key>)
Tus.S3.AccessKey / SecretKey string Ключи доступа
Tus.S3.PreferredPartSizeInBytes int Рекомендуемый размер части. Пример: 5242880 (5 МБ)

⚠️ Для перехода между Local и S3 нужен перезапуск приложения.

⚠️ Если площадка 1Формы работает по HTTPS, Tus.S3.Endpoint тоже должен использовать https:// — иначе возможны ошибки при скачивании файлов и обращении к хранилищу. Подробнее — disk/admin.md § «TUS preupload для больших файлов».

Ключ Тип Назначение
FileIdToStartOcr int Минимальный ID файла (FileStorageFiles.Id), с которого начинают обработку джобы OcrJob (распознавание текста в img/jpg/png) и TikaJob (извлечение текста из документов). Запуск каждые 15 минут. Использовать для постепенной активации OCR на больших инсталляциях
SautinSoftLicenseKey string Лицензионный ключ библиотеки SautinSoft.PdfMetamorphosis (используется при DefaultConverterPdf=SautinSoft). Без ключа конвертер работает в пробном (ограниченном) режиме
DefaultConverterPdf string Конвертер документов в PDF (SautinSoft / другие). См. business.md § «Конвертация документов в PDF»
DefaultRevisionLib string Библиотека для приёма/отклонения правок в DOCX. Значения: Devexpress (по умолчанию) / Aspose. С версии 2.268.352: Aspose корректно работает с защищёнными формами (w:edit="forms"), DevExpress на таких файлах падает или возвращает пустой документ
DefaultConvertLib string Библиотека для конвертации Word-документов между форматами DOCX / EPUB / ODT. Значения: Devexpress (по умолчанию) / Aspose. С версии 2.268.352: Aspose корректно конвертирует защищённые формы (w:edit="forms"), DevExpress их ломает — типичный симптом был пустой PDF после цепочки «принять правки → конвертировать .doc.docx → PDF»

⚠️ В сертифицированной сборке (ФСТЭК) настройки UseDevexpressDocToPdfConverter, DefaultConverterPdf, SautinSoftLicenseKey, DefaultRevisionLib и DefaultConvertLib не применяются — библиотеки DevExpress, SautinSoft, Aspose и другие коммерческие компоненты конвертации документов исключены из сборки целиком. Конвертация документов форматов DOC/DOCX/XLSX в PDF в этой сборке недоступна.

Связанные документы

Смежные разделы:

  • files/business.md — бизнес-логика (видеоконвертация архитектурно, ограничения)
  • disk/admin.md — журнал действий
  • ext-params/file/settings-reference.md — настройки ДП «Файл» (AllowScanning, IsLogFileReadsAction и др.)
  • categories/admin.md — настройки категории (автоматизации, права)
  • system/admin.md — общие настройки приложения (квота личной папки)