file-storage.xml
Конфигурационный файл для настройки файловых хранилищ.
В конфигурационном файле file-storage.xml настраивается количество файловых хранилищ, их тип, активное хранилище и прочие характеристики.
Наличие файла не обязательно.
Путь к файлу
Файл создается и хранится в каталоге, путь к которому указан в параметре -Dext.prop.dir виртуальной машины Java. Например, Dext.prop.dir=/opt/nausd4/conf.
Содержание файла
Параметры файлового хранилища
| Характеристика | Блок или тег в файле | Описание |
|---|---|---|
| Число файловых хранилищ | количество блоков <storage> |
Число файловых хранилищ соответствует количеству блоков. Можно настроить одно или несколько файловых хранилищ |
| Активное хранилище | тег <active> |
Хранилище, в котором размещаются файлы при добавлении. Другие хранилища будут хранить ранее добавленные в них файлы. Если активное хранилище не указано (тег <active> </active> удален вместе с содержимым), то файлы будут помещаться в базу данных |
|
Включение механизма "склеивания" файлов" |
тег <deduplication> |
Необязательный параметр. Регулирует возможность "склеивания" файлов. Склеивание файлов — процедура присвоения одного хеша и одного соответствующего контента целой группе файлов, если среди загруженных присутствуют файлы с одинаковым контентом. Возможные значения:
Перед переключением параметра <deduplication> c false на true необходимо выполнять команду api.fileStorage.shrink() |
|
Код файлового хранилища |
тег <code> |
Код используется для указания активного хранилища |
|
Описание файлового хранилища |
тег <description> |
|
|
Путь до хранилища в файловой системе |
тег <path> |
Только для хранения файлов в файловой системе. Директория, указанная в этом параметре, должна существовать и быть пустой. После применения конфигурации в данном каталоге будет создана структура для хранения файлов |
|
Сжатие |
тег <compress> |
Параметр, определяющий автоматическое сжатие файлов, загружаемых в хранилище. При изменении параметра у существующего хранилища, автоматического сжатия ранее загруженных файлов не производится (для сжатия необходимо выполнить скрипт, см. Операции с файловыми хранилищами). В базе данных все файлы хранятся в сжатом виде |
|
Тип хранилища |
тег <type> |
Необязательный параметр. Тип хранилища, позволяет выбрать в качестве хранилища файловую систему или Amazon S3. Возможные варианты:
|
|
Код s3endpoint |
тег <s3endpoint> |
Необязательный параметр Код s3endpoint, где описаны параметры подключения |
|
Имя бакета в S3 |
тег <bucketName> |
Необязательный параметр Имя бакета в S3. Если его не существует, то он будет создан Правило именования:
|
|
Структура S3 хранилища |
тег <hierarchical> |
Необязательный параметр. Структура каталогов для файлового хранилища S3. Возможные значения:
Пример: <hierarchical>false</hierarchical> |
Параметры настройки хранилища, работающего по протоколу S3 (Amazon S3, Ceph)
| Характеристика | Блок или тег в файле | Описание |
|---|---|---|
| Список конфигураций для S3 | тег <s3endpoints> |
Необязательный параметр Настройка различных доступов к S3. Должен быть, если есть хотя бы одно S3 хранилище |
| Конфигурация S3 хранилища | тег <s3endpoint> |
Необязательный параметр Настройка доступа к S3, параметр заполняется, если есть хотя бы одно S3 хранилище |
|
Код |
тег <code> |
Уникальный код для данного s3endpoint |
| Ключ доступа к S3 | тег <accessKey> | AccessKey из реквизитов доступа к S3 |
|
Секретный ключ доступа к S3 |
тег <secretKey> |
SecretKey из реквизитов доступа к S3 |
|
Адрес S3 хранилища |
тег <url> |
Необязательный параметр. Указывается только при использовании S3-хранилища, отличного от AWS S3. Пример: <url>https://ceph-storage.domain.local/</url> |
|
Количество попыток |
тег <numberOfAttempts> |
Только для хранения файлов в S3. Число, обозначающее сколько раз подряд операции должны прерваться по тайм-ауту, чтобы файловое хранилище заблокировалось на определенное время |
|
Таймаут для операции |
тег <taskTimeout> |
Только для хранения файлов в S3. Таймаут выполнения действия в файловом хранилище в миллисекундах |
|
Время блокировки |
тег <rampDownPeriod> |
Только для хранения файлов в S3. Время в миллисекундах, на которое нужно заблокировать файловое хранилище, если numberOfAttempts раз подряд выполнение операций прерывалось по таймауту |
Параметры настройки хранилища, работающего через groovy-модуль
| Характеристика | Блок или тег в файле | Описание |
|---|---|---|
| Конфигурация groovy хранилища | тег <groovyExtendedStorage> |
Необязательный параметр Настройка доступа к groovy-файловому хранилищу. Должен быть, если есть хотя бы одно хранилище типа groovy |
| Название модуля | тег <module> |
Название модуля, который содержит реализацию взаимодействия с файловым хранилищем |
|
Метод, возвращающий реализацию FileStorageCRUD |
тег <method> |
Метод, который должен возвращать реализацию интерфейса ru.naumen.core.server.filestorage.spi.storages.FileStorageCRUD |
|
Параметры инициализации |
тег <initParams> |
Параметры передаваемые в метод указанный в теге method |
Интерфейс Interface FileStorageCRUD
Интерфейс для основных операций с внешним файловым хранилищем предназначен для реализации в groovy-модуле.
-
create
java.lang.String create(DtObject file, java.io.InputStream content)
Создание файла во внешнем хранилище.
Параметры:
- file — БО файл;
- content — содержимое файла
Возвращает идентификатор файла.
-
delete
void delete(java.lang.String id)
Параметр:
- id — идентификатор файла.
-
exists
boolean exists(java.lang.String id)
Проверить существование файла.
Параметр:
- id — идентификатор файла.
Возвращает true, если файл существует во внешнем хранилище.
-
getFilePath
java.lang.String getFilePath(java.lang.String uuid)
Получить идентификатор файла во внешнем хранилище.
Параметр:
- uuid — идентификатор БО типа file.
Возвращает идентификатор файла во внешнем хранилище.
-
read
java.io.InputStream read(java.lang.String id)
Получить содержимое файла.
Параметр:
- id — идентификатор файла.
Возвращает содержимое файла.
-
saveFilePath
void saveFilePath(java.lang.String uuid, java.lang.String externalId)
Параметры:
- uuid — идентификатор БО типа file;
- externalId — идентификатор файла во внешнем хранилище
-
update
void update(java.lang.String id, DtObject file, java.io.InputStream content)
Обновить содержимое файла во внешнем хранилище.
Параметры:
- id — идентификатор файла;
- file — БО файл;
- content — содержимое файла.
Примеры
<?xml version="1.0" encoding="UTF-8"?>
<s:configuration xmlns:s="http://www.naumen.ru/fileStorageSettings"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.naumen.ru/fileStorageSettings fileStorageSettings.xsd ">
<settings>
<!-- Код файлового хранилища либо не указывать этот элемент если новые файлы необходимо помещать в БД -->
<active>storage1</active>
</settings>
<storages>
<storage>
<code>storage1</code>
<description>Активное в данный момент хранилище файлов расположенное в /path/to/storage1 . Новые файлы будут помещаться в это хранилище. Содержимое файлов хранится в несжатом виде.</description>
<path>/path/to/storage1</path>
<compress>false</compress>
</storage>
<storage>
<code>storage2</code>
<description>Не активное в данный момент хранилище файлов расположенное в /path/to/storage2 . Содержимое файлов будет хранится в сжатом виде.</description>
<path>/path/to/storage2</path>
<compress>true</compress>
<type>disk</type> <!-- Необязательный параметр, в случае отсутствия считается, что это дисковое хранилище -->
</storage>
<storage>
<code>s3</code>
<description>Активное S3 хранилище</description>
<path>teststand</path> <!-- Имя папки внутри S3 бакета, в которую будут помещены файлы приложения. -->
<compress>true</compress>
<type>s3</type> <!-- Необязательный параметр, в случае отсутствия считается, что это дисковое хранилище -->
<s3endpoint>s3endpoint_default</s3endpoint>
<bucketName>test-bucket</bucketName>
</storage>
</storages>
<!-- Необязательный блок - конфигурация доступа к S3 хранилищу -->
<!-- Внимание! Если настроено использование хранилища SSL-ключей не по умолчанию (указана java опция -Djavax.net.ssl.trustStore), при использовании S3-файлового хранилища необходимо установить java-опцию -Dcom.amazonaws.sdk.disableCertChecking=true -->
<s3endpoints>
<s3endpoint>
<code>s3endpoint_default</code>
<accessKey>ключ</accessKey>
<secretKey>секретный_ключ</secretKey>
<url>https://ceph-storage.domain.local/</url> <!-- Необязательный параметр -->
<numberOfAttempts>2</numberOfAttempts> <!-- Необязательный параметр, в случае отсутствия считается, что тайм-аутов у ФХ нет -->
<taskTimeout>100</taskTimeout> <!-- Необязательный параметр, в случае отсутствия считается, что тайм-аутов у ФХ нет -->
<rampDownPeriod>30000</rampDownPeriod> <!-- Необязательный параметр, в случае отсутствия считается, что тайм-аутов у ФХ нет -->
</s3endpoint>
</s3endpoints>
<!-- Необязательный блок - конфигурация доступа к файловому хранилищу через groovy-модуль -->
<groovyExtendedStorage>
<module>someFileStorageGroovyModule</module>
<method>createFS</method>
<initParams>someFSParameter1=param1, someFSParameter2=param2</initParams>
</groovyExtendedStorage>
</s:configuration>