Программное добавление файлов в библиотеку Kentico Media

Используя CMSDesk и перейдите на вкладку "Инструменты", затем "Медиатека", я могу добавить файлы во встроенную библиотеку мультимедиа Kentico. Есть ли способ сделать это с помощью их API?

3 ответа

Решение

Вы можете сделать это с помощью Kentico API. Это на самом деле довольно богато, но документации и примеров там немного не хватает.

Ниже приведен пример метода (фактически используемый в качестве метода веб-службы, поскольку у нас есть как удаленные, так и локальные страницы, которые его используют) и пример метода, который его вызывает (например, с веб-страницы "edit").

fileLogo -> защищенный System.Web.UI.WebControls.FileUpload fileLogo;

        [WebMethod]
    public bool Import(int libraryID, string folderName, string fileName, byte[] bytes)
    {
        SiteInfo siteInfo = SiteInfoProvider.GetCurrentSite();
        MediaLibraryInfo libraryInfo = MediaLibraryInfoProvider.GetMediaLibraryInfo(libraryID);

        fileName = fileName.Replace(" ", "-").Replace("&", "-").Replace("'", "-").Replace("+", "-").Replace("=", "-").Replace("[", "-").Replace("]", "-").Replace("#", "-").Replace("%", "-").Replace("\\", "-").Replace("/", "-").Replace(":", "-").Replace("*", "-").Replace("?", "-").Replace("\"", "-").Replace("<", "-").Replace(">", "-").Replace("|", "-");

        bool bRetValue = false;

        string filePath = Server.MapPath(string.Format("/{0}/media/{1}/{2}/{3}", siteInfo.SiteName, libraryInfo.LibraryFolder, folderName, fileName));
        File.WriteAllBytes(filePath, bytes);
        if (File.Exists(filePath))
        {
            string path = MediaLibraryHelper.EnsurePath(filePath);
            MediaFileInfo fileInfo = new MediaFileInfo(filePath, libraryInfo.LibraryID, folderName);
            fileInfo.FileSiteID = siteInfo.SiteID;
            MediaFileInfoProvider.ImportMediaFileInfo(fileInfo);
            bRetValue = true;
        }

        return bRetValue;
    }

            string filePath = "~/SITENAME/media/SITE_MEDIALIB/Logos/";
        string fileName = string.Empty  ;

        if (fileLogo.FileName.Length > 0)
        {
            var ext = fileLogo.FileName.Substring(fileLogo.FileName.LastIndexOf('.') + 1).ToLower();

            fileName = entryTitle + "." + ext; 

            MediaLibrary il = new MediaLibrary();
            il.Import(3, "FOLDERNAME", fileName, fileLogo.FileBytes);
        }

Кажется, это делает то, что вы хотите http://www.rustedmushroom.com/2010/06/working-with-media-libraries-in-kentico-undocumented-api-style/

[РЕДАКТИРОВАТЬ: По состоянию на 4/4/2013, эта ссылка выше не работает. Если кто-то найдет альтернативную ссылку, обновите и удалите это сообщение.]

Сохранение здесь как оригинальная ссылка кажется мертвым.

Опубликовано 23 июня 2010 года Кевином

Таким образом, если вы когда-либо работали с CMS Kentico на основе.NET ( http://www.kentico.com/), вы будете знать, что библиотеки мультимедиа могут быть очень мощным инструментом для организации данных, не относящихся к сайту, включая изображения, документы и все остальное, что вам нужно хранить и интегрировать с вашей CMS. И все это работает фантастически, до тех пор, пока вы не пытаетесь что-либо делать с этим на стороне кода. Вот где все становится интересным, если не сказать больше.

Веб-сайт документации Kentico ( http://devnet.kentico.com/documentation.aspx) очень полезен с точки зрения работы с деревом и манипулирования им из кода, он предлагает очень мало с точки зрения манипулирования и работы в целом с Медиатека. Поэтому я потратил много времени на просмотр модулей, чтобы увидеть, что делает Kentico и как он это делает, чтобы вам не пришлось этого делать.

Так как это мой первый пост, и я все еще немного увлечен "написанием", так что давайте просто перейдем к коду.

//Media Library Info - takes Media Library Name and Website Name
MediaLibraryInfo libraryInfo = MediaLibraryInfoProvider.GetMediaLibraryInfo("Website", "MediaLibrary");
//Folder in Media Library where Item will be Inserted
string mediaLibraryFolder = "MediaLibraryFolder";
//Absolute Path to File
string filePath = Server.MapPath("~/Website/media/MediaLibrary/" + "MediaLibraryFolder/MediaLibraryItem.pdf");
// Get Relative Path to File
string path = MediaLibraryHelper.EnsurePath(filePath);
//create media file info item - takes the relative path to the document, the library ID, and the folder name where the document will be located within the media library
MediaFileInfo fileInfo = new MediaFileInfo(path, libraryInfo.LibraryID, mediaLibraryFolder);
//set the title to something nice
fileInfo.FileTitle = "Document Title";
//set the description to something useful
fileInfo.FileDescription = "Document Description";
// Save media file info
MediaFileInfoProvider.ImportMediaFileInfo(fileInfo);

Я думаю, что это довольно очевидно, мы создаем объект MediaFileInfo, устанавливаем некоторые вещи в нем, а затем вставляем его в MediaFileInfoProvider. В объекте MediaFileInfo имеется множество дополнительных свойств, таких как FileSize, который (как следует из названия свойства) хранит размер файла в long. Pro tip - используйте CMS.GlobalHelper.DataHelper.GetSizeString функция для преобразования long в строку, форматирование ее в читаемые пользователем данные.

Это на самом деле просто царапает поверхность того, что вы можете сделать с библиотеками мультимедиа в коде позади. Присмотритесь MediaFileInfo а также MediaFIleInfoProvider классы, наряду с MediaLibraryHelper, MediaLibraryInfo, MediaLibraryInfoProvider классы. Там очень мало, что не может быть сделано.

Другие вопросы по тегам