Средний
Важно. Для корректной работы приведенных ниже примеров кода необходимо подключить пространство имен Terrasoft.Common.
using Terrasoft.Common;
Пример. Получить экземпляр класса, реализующего интерфейс IFile.
// Получаем фабрику файлов. IFileFactory fileFactory = UserConnection.GetFileFactory(); // Создаем файловый локатор для файла с идентификатором recordId, который хранится в таблице БД // "ActivityFile" ("Файлы и ссылки" для объекта "Activity"). var fileLocator = new EntityFileLocator("ActivityFile", recordId); // Передаем сформированный локатор в метод Get фабрики. IFile file = fileFactory.Get(fileLocator); // В результате в file получаем экземпляр некоего класса, который реализует интерфейс IFile, через который // можно производить другие манипуляции с файлом и его содержимым.
// Создаем файловый локатор для файла с идентификатором recordId, который хранится в таблице БД // "ActivityFile" ("Файлы и ссылки" для объекта "Activity"). var fileLocator = new EntityFileLocator("ActivityFile", recordId); // Передаем сформированный локатор в расширяющий метод GetFile. IFile file = UserConnection.GetFile(fileLocator); // В результате в file получаем экземпляр некоего класса, который реализует интерфейс IFile, через который // можно производить другие манипуляции с файлом и его содержимым.
// Получаем фабрику файлов. IFileFactory fileFactory = UserConnection.GetFileFactory(); // Создаем уникальный идентификатор нового файла. Guid recordId = Guid.NewGuid(); // Создаем файловый локатор для нового файла с идентификатором recordId, который хранится в таблице БД // "ActivityFile" ("Файлы и ссылки" для объекта "Activity"). var fileLocator= new EntityFileLocator("ActivityFile", recordId); // Передаем сформированный локатор в метод Create фабрики. IFile file = fileFactory.Create(fileLocator); // В результате в file получаем экземпляр некоего класса, который реализует интерфейс IFile, через который // можно производить другие манипуляции с файлом и его содержимым.
// Создаем уникальный идентификатор нового файла. Guid recordId = Guid.NewGuid(); // Создаем файловый локатор для нового файла с идентификатором recordId, который хранится в таблице БД // "ActivityFile" ("Файлы и ссылки" для объекта "Activity"). var fileLocator= new EntityFileLocator("ActivityFile", recordId); // Передаем сформированный локатор в расширяющий метод CreateFile. IFile file = UserConnection.CreateFile(fileLocator); // В результате в file получаем экземпляр некоего класса, который реализует интерфейс IFile, через который // можно производить другие манипуляции с файлом и его содержимым.
Пример. Создать новый файл с привязкой к записи раздела Активности (Activities).
Создание нового файла
// Создаем уникальный идентификатор нового файла. Guid fileId = Guid.NewGuid(); // Создаем файловый локатор для нового файла. var fileLocator= new EntityFileLocator("ActivityFile", fileId); // Получаем объект IFile для нового файла. IFile file = UserConnection.CreateFile(fileLocator); // В хранилищах еще не сохранены ни метаданные нового файла, ни его контент. // Задаем имя файлу в его метаданных. file.Name = "New file"; // Устанавливаем новому файлу атрибут: привязываем этот файл к записи Активности с ключом activityId. // Это тоже метаданные файла. file.SetAttribute("ActivityId", activityId); // Сохраняем метаданные файла. Это нужно делать обязательно ПЕРЕД сохранением его контента. file.Save(); // byte[] content — это контент файла. var content = new byte[] {0x12, 0x34, 0x56}; using (var stream = new MemoryStream(content)) { // Сохраняем контент в БД. // FileWriteOptions.SinglePart означает, что весь контент передается одним непрерывным куском. file.Write(stream, FileWriteOptions.SinglePart); }
Пример. Получить содержимое файла.
Чтение содержимого файла
var content = new byte[](); // Получаем файл по его локатору. var fileLocator= new EntityFileLocator("ActivityFile", recordId); IFile file = UserConnection.GetFile(fileLocator); // Читаем все содержимое файла в массив байт content. Не забудьте освобождать объект потока с помощью using! using (Stream stream = file.Read()) { content = stream.ReadToEnd(); }
Пример. Скопировать файл, затем переместить его на новое место и удалить.
Копирование, перемещение, удаление файла
var content = new byte[](); // Получаем файл по его локатору. var fileLocator= new EntityFileLocator("ActivityFile", fileId); IFile file = UserConnection.GetFile(fileLocator); // Читаем все содержимое файла в массив байт content. Не забудьте освобождать объект потока с помощью using! using (Stream stream = file.Read()) { content = stream.ReadToEnd(); } // Копирование файла. // Создаем новый IFile для копирования текущего. Guid copyFileId = Guid.NewGuid(); var copyFileLocator = new EntityFileLocator("ActivityFile", copyFileId); IFile copyFile = UserConnection.CreateFile(copyFileLocator); copyFile.Name = file.Name + " - Copy"; copyFile.Save(); // Копируем содержимого первого файла в новый файл. copyFile.Write(new MemoryStream(content), FileWriteOptions.SinglePart); // Альтернативный способ копирования файла. file.Copy(copyFile); // Перемещение файла. // Создаем новый файл для перемещения текущего. Guid moveFileId = Guid.NewGuid(); var moveFileLocator = new EntityFileLocator("ContactFile", moveFileId); IFile moveFile = UserConnection.CreateFile(moveFileLocator); moveFile.Save(); // Перемещаем на новое место. file.Move(moveFile); // Удаление исходного файла. file.Delete();