Перенос файлов
Общее описание
При необходимости перенести файлы из одного хранилища в другое или перенести файлы в рамках одного хранилища. Это осуществляется при помощи вызова веб-сервиса загрузки, а так же есть возможность передать заданные настройки, вплоть до передачи наименования файлам
Для использования функции требуется вставка данных в таблицу
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/#/»
Добавляем интересующее нас хранилище в
mdt.FileStorage
в случае его отсутствияПровайдер
- Значение изmdt.FileStorageProvider
Корневая директория
- Абсолютный путь к директории, где лежат файлыПишем 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
Вызываем веб-сервис, который начнет обработку добавленных записей