Распределение по хранилищам

В 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