Получение размера вложений 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();

Теги

Поделиться

Виталий Жуков

Виталий Жуков

Техлид, Архитектор, Разработчик, Microsoft MVP. Более 20 лет опыта в области системной интеграции и разработки программного обеспечения. Специализируюсь на проектировании и внедрении масштабируемых высокопроизводительных программных решений в различных отраслях.