Загрузка файлов с помощью VDF

Один из рабочих процессов VDF — загрузка файла. При загрузке файла из хранилища обычно имеется несколько других этапов, помимо простой передачи бит с сервера хранилища.

Например, это выбор расположения рабочей папки для файла, отображение диалогового окна хода выполнения задания, исправление поврежденных из-за перемещения или переименования ссылок файла и т. д. Даже если для клиентских приложений не нужна бизнес-логика, слой VDF предоставляет дополнительные преимущества, такие как повышение производительности при параллельной загрузке файлов и скрытие сложности работы со службой Filestore.

Как и в случае с несколькими функциями VDF существуют версии API для получения файлов с GUI и без него. Метод без GUI доступен через службу FileManager, предоставляемую классом соединения VDF. Эта служба предоставляет несколько разных методов для работы с файлами хранилища. Метод, который используется для загрузки одного или нескольких файлов хранилища, имеет два варианта: FileManager.AcquireFiles() и FileManager.AcqurieFilesAsync(). Как ясно из имени, первый является вызовом синхронной загрузки, а второй — асинхронной, которая немедленно возвращает класс System.Threading.Tasks.Task, которую можно использовать для планирования продолжения. Варианты методов получения файлов с GUI имеют сходное имя AcquireFiles() и AcquireFilesAsync(), но доступ к ним осуществляется через класс VDF.Vault.Forms.Library. Как и в случае с методом без GUI, асинхронная версия с GUI возвращает управление методом вызова почти сразу же и возвращает задачу фактического получения. Метод с GUI по умолчанию отображает диалоговое окно хода выполнения в процессе загрузки. Диалоговое окно будет немодальным, если используется асинхронная версия; в противном случае оно будет модальным.

Эти разнообразные методы получения принимают некоторую форму объекта параметров для контроля различных аспектов рабочего процесса получения. Методы без GUI принимают класс VDF.Vault.Settings.AcquireFilesSettings в качестве параметра. Этот класс будет использоваться в качестве базового класса для всех вариантов параметров загрузки. Версии с GUI методов получения файлов принимают два разных класса параметров версий, для которых базовым является AcquireFilesSettings. Это классы VDF.Vault.Forms.Settings.ProgressAcquireFilesSettings и VDF.Vault.Forms.Settings.InteractiveAcquireFilesSettings. Любой из этих классов параметров может быть передан в метод получения файла с GUI. Если клиентские приложения используют класс ProgressAcquireFilesSettings, то при загрузке файла пользователь будет видеть только диалоговое окно хода процесса. Если вместо этого передать в методы получения файлов с GUI класс InteractiveAcquireFilesSettings, VDF отображает диалоговое окно получения/выдачи перед попыткой загрузить файлы. В данном диалоговом окне пользователь может изменить некоторые параметры загрузки до ее начала, например, выдачу определенных файлов или смену папки для загрузки.

Клиентские приложения будут главным образом использовать другие классы параметров получения файлов таким же образом. В целом процесс выбора параметров получения файлов состоит из двух этапов. Сначала следует создать экземпляр класса параметров. Конструктор параметров получает соединение VDF с хранилищем, из которого клиентское приложение пытается загрузить файлы. На втором этапе нужно добавить получаемые файлы в экземпляр параметров с помощью метода AcquireFilesSettings.AddEntityToAcquire(). Разумеется, существуют и другие параметры и варианты расширения. Подробное описание других свойств параметра можно найти в документации по SDK. После завершения настройки вызовите соответствующий метод AcquireFiles[Async]() и передайте в настройки как параметр. Пример рабочего процесса получения с помощью VDF есть в примере приложения VaultBrowserSample, который поставляется вместе с SDK.

Переход от 2013 SDK Download API к 2014 Download API

Разработчики, которым наиболее удобно выполнять прямое портирование из 2013 SDK в 2014 SDK, могут сконцентрироваться на использовании метода синхронной загрузки без GUI, FileManager.AcquireFiles(). Дело в том, что в предыдущих версиях SDK не было GUI или асинхронных компонентов или методов и, вероятно, в обновляемых клиентских приложениях есть какой-то GUI или код для загрузки и/или выдачи файлов. Большинство приложений версии 2013 могут загрузить файлы из хранилища с помощью метода DocumentService по DownloadFile(). Он просто извлекает байты данных заданного файла в хранилище. В некоторых вариантах кода это может выглядеть так:

Вышеуказанный код позволяет загрузить байты заданного файла из хранилища и записать их в определенное место на диске. Код, использующий для этой цели VDF, должен выглядеть примерно так: