Получение размера вложений SPListItem'а
Сегодня небольшой пост о том как получить размер всех вложений элемента списка SharePoint.
Где хранятся вложенные файлы{#h}
Все вложения элементов SharePoint хранит в папке, путь к которой формируется следующим образом:
<Путь_к_списку>/Attachments/<ID_элемента>
Таким образом наша задача сводится к получению размера файлов, содержащихся в папке.
Решение
Для удобства дальнейшего применения можно написать метод-расширитель, примерно вот такой:
public static class SPListItemExtensions
{
/// <summary>
/// Размер вложений элемента списка
/// </summary>
/// <param name="item">Элемент списка</param>
public static long AttachmentsSize(this SPListItem item)
{
// Префикс вложений
var folderUrl = item.Attachments.UrlPrefix;
// Список, содержащий элемент
var list = item.ParentList;
// Сайт, содержащий список
var web = list.ParentWeb;
// Получаем папку, в которой хранятся вложенные элементы
var folder = web.GetFolder(folderUrl);
// Получаем все файлы в папке и суммируем их размеры
var length = folder.Files
.Cast<SPFile>()
.Sum(f => f.TotalLength);
return length;
}
}
Здесь подробные комментарии, я думаю, не нужны.
Применение
Использовать этот метод-расширитель можно следующим образом:
SPListItem item = GetListItem();// Метод, возвращающий элемент списка
var totalSize = item.AttachmentsSize();