Перенос файлов

Общее описание

  1. При необходимости перенести файлы из одного хранилища в другое или перенести файлы в рамках одного хранилища. Это осуществляется при помощи вызова веб-сервиса загрузки, а так же есть возможность передать заданные настройки, вплоть до передачи наименования файлам

  2. Для использования функции требуется вставка данных в таблицу mdt.FileTransfer.

Хранилища для файлов

Доступные хранилища для файлов располагаются в таблице mdt.FileStorageProvider

  • БД - база данных

  • Диск - серверный диск

  • OneDrive - облачное хранилище OneDrive

  • S3 - облачное хранилище Amazon S3

Используемые таблицы

  • mdt.File - Таблица содержащая информацию о файлах, так же содержит бинарные данные для хранения в БД и UID - уникальный идентификатор. Используется как внешний идентификатор, указывается в ссылках на скачивание файла.

  • mdt.FileStorage - Таблица с параметрами хранилища которое используется для перемещения файлов. Возможна передача данных из интерфейса MDT, через узел Администрирования -> Файлы -> Файловые хранилища

  • mdt.FileTransfer - Таблица с файлами для перемещения, так же содержит статус перемещения.

  • mdt.FileStorageProvider - Системный справочник, хранящий поддерживаемые провайдеры файловых хранилищ. Пользователю недоступен для редактирования.

  • mdt.FileSetting - Таблица содержит данные файлового хранилища по умолчанию. Возможна передача данных из интерфейса MDT, через узел Администрирования -> Файлы -> Настройки файлов

  • mdt.FileStorageSettingsDisk, mdt.FileStorageSettingsOneDrive, mdt.FileStorageSettingsS3 - Таблицы с данными конкретного хранилища.

Логика работы

  • Перенос файлов осуществляется согласно настройкам из таблицы mdt.FileTransfer

  • По завершению процесса веб-сервис выведет информацию об успешном\не успешном переносе файлов.

  • Файлы перемещаются в порядке возрастания данных из поля ID таблицы

Настройка

Добавьте команды для перемещения - внесите записи в таблицу mdt.FileTransfer. Для этого заполните:

  • ID_File - идентификатор файла, который требуется перенести.

  • ID_FileStorage - файловое хранилище, в которое необходимо перенести файл. Если поле не заполнено - выполняется стандартная логика, как для нового файла.

  • Path - расположение файла внутри хранилище. Если не заполнено — используется UID файла. Значение учитывается если заполнено поле ID_FileStorage.

внимание!

При передачи в Path повторяющихся значений файлы будут перезаписываться, например: при передачи двух файлов с наименованием “Name“, вместо сохранения двух файлов сохраниться один, который был перенесён последним.

Запуск переноса

  • вызовите веб-сервис, который начнет обработку добавленных записей. В браузере введите URL-адрес: <API-URL>/file/transfer, где API-URL - адрес MDT API.

Пример переноса файлов SQL скриптом:

Цель перенести файлы на диск сервера из БД «https://test.ics-it.ru/Test/test/#/»

  1. Добавляем интересующее нас хранилище в mdt.FileStorage в случае его отсутствия

    Провайдер - Значение из mdt.FileStorageProvider

    Корневая директория - Абсолютный путь к директории, где лежат файлы

  2. Пишем SQL скрипт заполняющий таблицу mdt.FileTransfer

-- Считаем кол-во дубликатов select f.ID as ID_File ,fs.ID_FileStorageProvider as ID_FileStorage ,f.[Name] ,row_number() over (partition by f.Name order by f.Name) as Ranging ,count(*) over (partition by f.Name) as [Count] from tpm.Contract_FileDoc as fd inner join mdt.[File] as f on f.ID = fd.[File] inner join mdt.FileStorage as fs on fs.Code = 'disk' -- Заполняем таблицу с параметрами insert into mdt.FileTransfer (ID_File, ID_FileStorage, [Path]) select t.ID_File ,t.ID_FileStorage ,case when t.Count > 1 then concat(t.Ranging, '_', t.[Name]) else t.[Name] end as [Path] from #Test as t
  1. Вызываем веб-сервис, который начнет обработку добавленных записей