Распределение по хранилищам
В MDT можно самостоятельно задать логику распределения файлов по хранилищам с помощью SQL-функции.
SQL-функция по переданным ей атрибутам файла возвращает идентификатор хранилища файла, а также задает расположение файла внутри этого хранилища.
Принцип работы SQL-функции:
При вызове передаются атрибуты файла:
@Uid uniqueidentifier
— уникальный идентификатор файла.@Name varchar(1000)
— наименование загруженного файла.@Type varchar(250)
— MIME-тип файла.
Значения параметров соответствуют одноименным полям таблицы mdt.File
.
Возвращаемая строка имеет табличный тип и содержит параметры:
ID_FileStorage
— идентификатор файлового хранилища, в которое будет сохранен загружаемый файл. Если не заполнено — используется хранилище по умолчанию.Path
— путь к файлу, определяет расположение файла внутри хранилища. Игнорируется, если полеID_FileStorage
не заполнено.
Пример SQL-функции
create function [demo].[udf_GetFilePathAndStorage]
(
@Uid uniqueidentifier,
@Name varchar(1000),
@Type varchar(250)
)
returns @output table
(
ID_FileStorage int,
Path varchar(1000)
)
as
begin
-- Файл является изображением?
if (charindex('image', @Type) = 1)
insert into @output values (
-- Выбирается файловое хранилище с кодом images
(select ID from mdt.FileStorage where code = 'images'),
-- Расположение файла задается как `<текущая дата в формате YYYY-MM-DD>/<имя-файла>`
convert(varchar(30), getdate(), 23) + '/' + @Name
)
-- Файл является документом?
else if (charindex('word', @Type) > 0 or charindex('document', @Type) > 0)
insert into @output values (
-- Выбирается файловое хранилище с кодом docs
(select ID from mdt.FileStorage where code = 'docs'),
-- Расположение внутри хранилища не задается, используется стандартная логика для провайдера
null
)
-- В ином случае данные не возвращаются, а значит используется логика по умолчанию
return
end