Программное добавление файлов в библиотеку 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
классы. Там очень мало, что не может быть сделано.