Перейти к содержанию

Добавить или заменить файл в карточке на сервере

Добавить или заменить файл в карточке на сервере

Допустим, требуется добавить файл в карточку, если он в ней отсутствует, или заменить содержимое файла. Ниже приведён код для плагина Chronos, который решает такую задачу (для серверных расширений код будет аналогичен).

var cardRepository = unityContainer.Resolve<ICardRepository>(); var fileManager = unityContainer.Resolve<ICardFileManager>(); var krTokenProvider = unityContainer.Resolve<IKrTokenProvider>();

Guid cardID = ... ;

// если тип карточки включён в типовое решение, то необходимо указать токен с правами var token = krTokenProvider.CreateToken(cardID);

// загружаем карточку var getRequest = new CardGetRequest { CardID = cardID }; token.Set(getRequest.Info);

var getResponse = await cardRepository.GetAsync(getRequest); if (!getResponse.ValidationResult.IsSuccessful()) { logger.LogResult(getResponse.ValidationResult); return; }

var card = getResponse.Card;

// добавляем или заменяем файл, а затем сохраняем карточку await using (var container = await fileManager.CreateContainerAsync(card)) { // ищем файл с именем "file.txt" среди всех приложенных файлов var file = container.FileContainer.Files.FirstOrDefault(x => x.Name == "file.txt");

if (file == null) { // не нашли файл - добавляем его

await container.FileContainer .BuildFile("file.txt") .SetContent(...) // также есть методы SetContentText или SetContentReadOnly .SetCategory("Категория файла") // необязательно .AddWithNotificationAsync(); } else { // файл уже есть, заменяем его await file.ReplaceAsync(...); // также есть метод ReplaceText }

// сохраняем карточку с файлами var storeResponse = await container.StoreAsync((c, request) => { // для типового решения надо указать токен с правами token.Set(request.Card.Info); }); }

Back to top