SharePoint 2013 - Галерея изображений с хранением контента вне базы данных

imageПоступил запрос о создании на сайте SharePoint 2013 отдельного хранилища графических изображений (цифровых фотографий). Первое, что пришло в голову - реализовать задачу стандартными средствами SharePoint, создав для этих целей Библиотеку рисунков SharePoint. Однако согласно поставленной задачи таких изображений нужно будет размещать большое количество, да ещё и в большом разрешении (как следствие размер графических файлов будет не скромный). Изучая вопрос о том, как можно вынести данный контент из БД, мы встали перед выбором между двумя возможными на момент постановки задачи вариантами:

  • Использовать технологию Remote BLOB Storage (RBS) обеспечиваемую провайдером FILESTREAM из SQL Server в связке с SharePoint;
  • Использовать сторонние коммерческие решения для расширения SharePoint, позволяющие в числе своих функций выносить контент списков и библиотек SharePoint на внешние накопители, как например Sparqube Picture Column

После изучения возможных преимуществ и недостатков первого варианта стало очевидно, что без соблюдения Лучших практик использования FILESTREAM, которые мы в нашей ситуации не могли выполнить, в конечном счете мы можем получить ощутимую деградацию производительности семейства сайтов SharePoint и ещё ряд побочных неприятностей.

Второй вариант, с использованием сторонних коммерческих продуктов рассматривался вообще как крайний вариант, и отпал сам собой, в частности в силу неоправданной дороговизны подобных решений.

На помощь пришёл наш коллега - специалист по SharePoint Владимир Земляков, написавший Решение (Solution), которое создаёт в семействе сайтов SharePoint новый Тип контента и позволяют работать с ним, оперируя внешними графическими файлами в элементах Списка SharePoint, созданного на основе нового Шаблона списка. Визуализация изображений для конечных пользователей реализована на базе модифицированного Решения Mirata.PictureGallery от Daniel Reed. Далее обзорно рассмотрим установку и использование этих решений.

Для начала создадим общую сетевую папку, в которую будут размещаться графические файлы там где нам это удобно, например на выделенном файловом кластере.
В нашем случае UNC-путь к папке будет следующий: \KOM-AD01-FSCL\MEDIA-STORE$\IMAGES

Дадим к указанной сетевой папке полный доступ на уровне NTFS/SMB учетной записи, от имени которой работает пул приложений IIS для веб-сайта SharePoint, с которого в дальнейшем мы планируем выполнять добавление графических файлов.

Затем на каком-либо сайте IIS создадим виртуальный каталог, который будет ссылаться на указанную сетевую папку.

image

В итоге URL виртуального каталога для соответствующей папки в нашем случае получится следующий:
http://kom-ad01-srv-apps.holding.com/MEDIA/IMAGES/

***

Скачиваем файлы решений (PictureGallery.wsp и Mirata.PictureGallery.wsp) со страницы проекта на Codeplex - Sharepoint Picture Gallery, копируем эти файлы на наш WFE-сервер SharePoint и выполняем их установку с помощью PowerShell на уровне семейства сайтов (Site Collection)

Add-PSSnapin Microsoft.SharePoint.PowerShell

Add-SPSolution -LiteralPath "C:\Temp\PictureGallery.wsp"
Install-SPSolution -Identity "PictureGallery.wsp" -GACDeployment -WebApplication "http://site.holding.com"

Add-SPSolution -LiteralPath "C:\Temp\Mirata.PictureGallery.wsp"
Install-SPSolution -Identity "Mirata.PictureGallery.wsp" -GACDeployment -WebApplication "http://site.holding.com"

После установки Решений будет произведён автоматический перезапуск пула приложений IIS отвечающего за указанный сайт SharePoint. 

<

p align="center">***

Далее, для корневого сайта семейства сайтов, в которое мы развернули решения, переходим в Параметры сайта 

image

в разделе настроек Администрирование семейства сайтов выбираем ссылку Возможности семейства сайтов

image

Активируем появившиеся Возможности (Features) в указанном порядке:

1. Добавление типа контента и определение списка Галерея изображений
2. Галерея изображений
3. Веб-часть галерея изображений

 image

 

Проверяем появление нового Типа контента (Параметры сайта > Коллекции веб-дизайнера > Типы контента сайта)

image

 

Помимо нового Типа контента в семействе сайтов зарегистрирован новый Шаблон списка, на основании которого мы теперь можем создать Галерею изображений. Вызываем для этого в меню управления пункт Добавить приложение

image

 

В перечне веб-приложений находим приложение Галерея изображений и добавляем его на сайт задав ему любое удобное для нас имя, например Фотогалереяimage

В Параметрах нового списка выбираем пункт настройки Параметры галереи изображений:

image

Укажем UNC-путь к сетевой папке, в которую фактически будут загружаться добавляемые в список графически файлы, то есть путь до сетевой папки, которую мы создали ранее на файловом сервере.

Укажем URL-путь к папке веб-сервера, в которой загруженные файлы будут доступны для загрузки и просмотра через веб-интерфейс SharePoint, то есть ссылку на виртуальный каталог IIS, который мы создали ранее.

Как вы понимаете, оба пути должны указывать на одно и тоже физическое месторасположение.

image

Этих настроек достаточно, чтобы начать работу с Галереей изображений конечным пользователям SharePoint. К использованию кнопки Проверка мы вернёмся чуть позже.

<

p align="center">***

Чтобы выполнить добавление графических файлов, откроем форму списка нашей Галереи изображений, на ленте переключимся на закладку Элементы и воспользуемся кнопкой Загрузить изображения (кнопка доступна только пользователям имеющим право на изменение списка)

image

 

Откроется форма добавления, где с помощью кнопки Обзор мы можем выбрать добавляемые с компьютера пользователя графические файлы. Выделяем один или сразу несколько файлов и нажимаем кнопку Загрузить.

image

В случае успешной загрузки мы получим соответствующее сообщение.

image

В результате операции загрузки для каждого загружаемого графического файла в Галерее изображений будет создан отдельный элемент, в котором будут сохранены полные URL-пути до самого графического файла скопированного на файловый сервер и относящегося к нему генерируемого файла миниатюры. 

image

По умолчанию в созданном Списке включена возможность создания папок. Чтобы добавить новый элемент в определённую папку, в форме Списка нужно сначала войти в эту папку, а затем воспользоваться кнопкой Загрузить изображения.

В процессе добавления файлов в файловой системе по указанному ранее в настройках UNC-пути будут созданы копии этих файлов с именами в виде случайно сгенерированных уникальных идентификаторов (для того чтобы избежать возможных конфликтов имён файлов при многократных загрузках да ещё и с участием разных пользователей).

image

В этом же каталоге будет создан (если его ещё нет) подкаталог _t. В этот подкаталог с теме же ID с добавлением нижнего подчеркивания в начале имени будут сгенерированы Миниатюры изображений (Thumbnails) размером 150x100 пикселей, которые будут использоваться для визуализации в веб-части просмотра.

image

<

p align="center">***

Создаем отдельную страницу для просмотра Галереи изображений, на которую вешаем веб-часть Галерея изображений из категории СБСистем.

image

 

В свойствах веб-части в параметре List выберем Список (Галерею изображений), из которого мы хотим отображать графические файлы в данной веб-части, зададим название и при необходимости настроим фиксированную ширину зоны… 

image

Эту же веб-часть можно вывесить на главную страницу сайта, где публикуются новости и  отображаются все последние изменения контента сайта, но с уже более жёстким ограничением по выводу миниатюр, например с отображением только последних трёх добавленных изображений через параметр веб-части Page Size 

image

В необязательном параметре ViewAllImageUrl можно указать ссылку на отдельную страницу, на которой будет размещена эта-же веб часть но уже с бОльшим количеством отображаемых за один раз элементов, то есть как на главную страницу просмотра Галереи изображений. Если этот параметр не заполнен, то и соответственно ссылка Все элементы в веб-части отображаться не будет.  

В конечном итоге мы можем получить примерно следующий вид…image

При клике по миниатюре открывается модальное окно просмотра позволяющее перемещаться между графическими файлами отображаемыми в данный момент в веб-части.

image

Как видим, в веб-части над миниатюрами изображений нам доступны ссылки на элементы навигации, которые меняются в зависимости от прав пользователя на список и текущего положения относительно структуры папок списка.

image

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

Удаление элемента списка происходит поэтапно. То есть сначала выполняется проверка прав доступа к элементу списка и удаление этого элемента штатными механизмами SharePoint, а уже затем выполняется удаление ассоциированного графического файла и его миниатюры из файловой системы. Если в этот момент по какой-то причине (например временная блокировка файла) соответствующие файлы не смогли удалиться из файловой системы, а элемент списка SharePoint ассоциированный с этими файлами уже удалён, то может возникнуть ситуация, когда в файловой системе со временем скопится некоторое количество “файлового мусора”. Чтобы навести порядок как на файловой системе, так и в самом списке SharePoint, и была создана ранее упомянутая кнопка Проверка в Параметрах списка.

image

По нажатию этой кнопки будет произведено сопоставление элементов списка с каталогом файловой системы указанном в параметре UNC-путь. Если будут найдены какие-либо расхождения, будет выведена информационная таблица с возможностью удаления как “осиротевших” файлов в файловой системе, так и элементов списка имеющих ссылки на несуществующие файлы.

<

p align="center">***  

В заключении стоит сделать замечание о том, что при планировании резервного копирования веб-узлов SharePoint надо помнить, что контент размещенный по указанному нами UNC-пути в состав резервной копии не попадёт, поэтому нужно отдельно решить вопрос о резервном копировании этих файлов, если они имеют какую-то важность.

Всего комментариев: 34 Комментировать

  1. Victor /

    Очень интересное решение. Спасибо.
    Это пожалуй единственное решение, найденное мной в печати (интернете), более менее удовлетворяющее условиям при объемном хранении цифровых фотографий. Не хватает вариантов работы с разными типами стандартов фото, но это уже не к Вам наверное.

  2. Алексей Максимов / Автор записи

    Не совсем понятно про какие варианты речь.

    1. Victor /

      вариант работы с RAW форматом. В этом случае отсутствует контейнер для TAGs и непонятно как с этим работать. И еще, при использовании 2012r2 кодеки для RAW не существуют, как для 2008r2, опять же и как? т.е. есть ограничения? решаемые конечно, но прелесть типового решения от Майкрософт немного отодвигается :-) в сторону нетипового :-(

  3. Илья /

    Добрый день глубокоуважаемый Алексей.
    Попытался воспользоваться Вашей инструкцией, но к сожалению всё время натыкаюсь на одну и ту же ошибку - после создания галереи из шаблона при попытке добавить изображение ШП ругается на несуществующий список. В качестве дополнительного симптома - кнопка загрузить изображение - не имеет символа-рисунка, есть только текст. Подскажите пожалуйста куда копать.

    1. Владимир /

      Посмотрите логи, для этого воспользуйтесь утилитой UlsViewer для просмотра логов sharepoint.
      Какие ошибки возникают в момент добавления изображения?
      Какая версия sharepoint?

    2. Алексей Максимов / Автор записи

      Илья, давайте сделаем так. Владимир постарается помочь Вам в решении проблемы, но только публиковать объёмный листинг логов в ветке комментариев мы не будем.
      Создайте отдельную тему с говорящим названием на нашем форуме здесь: Форум IT-KB :: SharePoint Server 2013 и там уже публикуйте логи, скриншоты, и всё прочее, что нужно будет для разбора ситуации.

  4. Anton Masyan /

    вы маньяки, но благодаря вашим постам наконец-то переехали с 2007 шарика на 2013 и замутили интеграцию с system center orchestrator. Правда по ресурсам 2013 кушает на порядок больше )

    1. Алексей Максимов / Автор записи

      никаких тут маньяков нет. только честные и благородные люди :)

      1. Anton Masyan /

        просто посты всегда подробно расписаны, я представляю сколько времени уходит на скриншоты, текст, правки, просмотр превьюшки поста, чтобы ничего не поехало, выделение красными прямоугольниками и т.д.. ) респектую. )

        1. Алексей Максимов / Автор записи

          Спасибо. Мы стараемся :)

  5. Максим /

    Добрый день, все сделал как в инструкции, но не появляется кнопка "Загрузить изображения", доступ к изменению списка есть.

  6. Владимир /

    Проверьте еще раз:
    1. Активировать фичу 'Добавление кнопки загрузки изображений на ленту для списков, созданных на основе типа контента Галерея изображений'
    2. кнопка доступна только пользователям имеющим право на изменение списка
    3. через Sharepoint Manager 2013 посмотреть есть ли на уровне сайта Custom Action с названием Ribbon.UploadImages
    https://onedrive.live.com/?cid=8CA8E9F4BF99F926&id=8CA8E9F4BF99F926%21149&authkey=%21ACMMXqqbNQ6Bxe8&v=3

    1. Максим /

      Все три пункта соблюдены:
      1. Активирована фича
      2. Я являюсь главным администратором и имею полный доступ к сайту
      3. Custom Action с названием Ribbon.UploadImages присутствует как у вас на скриншоте
      но не появляется кнопка «Загрузить изображения»

    2. Макисм /

      Заметил что только при добавлении на главном сайте появляется кнопка, если добавить на подсайтах, то кнопка не отобразится. Но появился еще один нюанс после загрузки картинок миниатюры в папке появились нормальные, а по ссылке в браузере "Битые" черный квадратик маленький

      1. Владимир /

        видимо это баг - надо дорабатывать решение. Можете взять исходники на codeplex и доработать под себя

        1. Максим /

          я в разработке Sharepoint не очень, поэтому пользуюсь готовыми решениями, не могли бы вы подсказать как добавить кнопку «Загрузить изображения» или сделать так чтобы она отображалась на подсайтах?

        2. Данила /

          Есть такое. При режиме отладке браузер пишет что невозможно декодировать изображение. Сорцы есть только для Mirata.PictureGalery (возможно плохо искал). При переконвертации изображений средствами powershell отображается отлично.

          1. Данила /

            Ответил не на тот комментарий. Каюсь... Хотя какая разница.

  7. Максим /

    При добавлении картинок миниатюры имеют странный формат, в Google Chrome, они нормально отображаются, а в IE отображается миниатюра маленьким черным квадратиком с крестиком. При попытке открыть ее через Photoshop пишет ошикбу "Невозможно выполнить запрос: обнаружен неизвестный или некорректный JPEG-маркер". Как сделать нормальным отображение в IE?

    1. Владимир /

      у нас нормально отображается и в chrome и в IE.
      Версия IE 11.0.9600.17239

  8. Pavel /

    Здравствуйте! Есть одна проблема с кнопкой "Загрузить изображения", кнопка работает, а иконки нет, просто надпись. Посмотрел в режиме отладчика, отсутсвует тег с ссылкой на иконку, как можно решить эте проблему?

    1. Владимир /

      создал тему в форуме "Галерея изображений" http://forum.it-kb.ru/viewtopic.php?f=37&t=99
      Просьба дальше обсуждение вести там

  9. Pavel /

    :( К сожалению это решение не работает, по мимо отсутвующей иконки на кнопке загрузки изображений, не отображаются миниатюры jpeg изображений в IE11, в firefox отображаются. Что удивительно, миниатюры png отображаются в обоих браузерах. Так же очень сложный процесс публикации фоток, нам с вами конечно это не проблема, но простым пользователям замучаешься объяснять, они привыкли либо перетаскивать, либо нажать на жирную надпись "создайте рисунок". Так же нет возможности работать с библиотекай как с простыми файлами через кнопку "открыть в проводнике". Так же нет механизма "корзины", все кто имеет доступ на публикацию, могут удалять, и как я понял без возможности восстановления. В этом случае общую галерею не сделать. Едиственное ради чего ценен этот инструмент, это слайдер и контент вне базы. Вот если бы можно было бы прикрутить эти механизмы к штатной библиотеке рисунков с сохранением полного функционала, то цены бы не было этому решению.

    1. Pavel /

      Извините, не заметил ваше последнее сообщение.

  10. Alexandra /

    Подскажите, нет ли подобного решения для SharePoint 2010?

    1. Алексей Максимов / Автор записи

      У нас нет :)

  11. Алексей /

    Проверьте еще раз:
    1. Активировать фичу ‘Добавление кнопки загрузки изображений на ленту для списков, созданных на основе типа контента Галерея изображений’
    2. кнопка доступна только пользователям имеющим право на изменение списка
    3. через Sharepoint Manager 2013 посмотреть есть ли на уровне сайта Custom Action с названием Ribbon.UploadImages

    Можно подробные инструкции для пунктов 1 и 3?

    1. Владимир /

      1. Параметры сайта - Возможности семейства сайтов - активировать если не активна "Добавление кнопки загрузки изображений на ленту для списков, созданных на основе типа контента Галерея изображений"
      3. В Sharepoint Manager выбираем узел сайта, ищем свойство UserCustomActions с Name=Ribbon.UploadImages

  12. Алексей /

    С 1 ым пунктом разобрался (прочитал внимательно) Активировал все.
    3 остался под вопросом.

  13. Алексей /

    А если у меня нет Sharepoint Manager, можно это как то проверить? Кнопки нет вообще.

  14. Алексей /

    Можно скрин того что должно там быть?

  15. Алексей /

    Долгими мучениями было выяснено, что приложение работает только на корневом сайте. Там все отлично и иконка есть и добавление работает. На любом другом сайте приложение добавляется но кнопки загрузки нет.

  16. rinat /

    Надо было читать с низу вверх, развернул все, но кнопки Загрузить изображения нет.

Добавить комментарий