Получение размера вложений SPListItem'а

Сегодня небольшой пост о том как получить размер всех вложений элемента списка SharePoint.

Где хранятся вложенные файлы

Все вложения элементов SharePoint хранит в папке, путь к которой формируется следующим образом:
<Путь_к_списку>/Attachments/<ID_элемента>

Таким образом наша задача сводится к получению размера файлов, содержащихся в папке.

Решение

Для удобства дальнейшего применения можно написать метод-расширитель, примерно вот такой:

  1. public static class SPListItemExtensions
  2. {
  3.     /// <summary>
  4.     /// Размер вложений элемента списка
  5.     /// </summary>
  6.     /// <param name="item">Элемент списка</param>
  7.     public static long AttachmentsSize(this SPListItem item)
  8.     {
  9.         // Префикс вложений
  10.         var folderUrl = item.Attachments.UrlPrefix;
  11.         // Список, содержащий элемент
  12.         var list = item.ParentList;
  13.         // Сайт, содержащий список
  14.         var web = list.ParentWeb;
  15.         // Получаем папку, в которой хранятся вложенные элементы
  16.         var folder = web.GetFolder(folderUrl);
  17.         // Получаем все файлы в папке и суммируем их размеры
  18.         var length = folder.Files
  19.             .Cast<SPFile>()
  20.             .Sum(f => f.TotalLength);
  21.         return length;
  22.     }
  23. }

Здесь подробные комментарии, я думаю, не нужны.

Применение

Использовать этот метод-расширитель можно следующим образом:

  1. SPListItem item = GetListItem();// Метод, возвращающий элемент списка
  2. var totalSize = item.AttachmentsSize();

Поделиться

Коментарии