Как загрузить файл в медиатеку Sitecore в коде с помощью элемента управления ASP FileUpload? - PullRequest
5 голосов
/ 23 января 2012

Вот то, что я пробовал, и это не похоже на работу.Я не получаю никаких ошибок, но, похоже, он не добавляет файл в библиотеку мультимедиа.

using(new Sitecore.SecurityModel.SecurityDisabler())
{
  if(myFileControl.HasFile)
  {
    MediaCreatorOptions _options = new MediaCreatorOptions();
    _options.Database = Factory.GetDatabase("master");
    _options.FileBased = false;
    _options.IncludeExtensionInItemName = false;
    _options.KeepExisting = false;
    _options.Versioned = false;
    _options.Destination = "/sitecore/media library";
    MediaItem _newFile = MediaManager.Creator.CreateFromStream(myFileControl.FileContent, myFileControl.FileName, _options);
  }
}

Моя самая большая проблема заключается в том, что я не совсем понимаю, каковы некоторые из различных параметрови свойства делают.Что такое свойство «Назначение» для MediaCreatorOptions?Это должна быть просто папка?У него тоже должно быть название предмета?Каковы три параметра для метода CreateFromStream?Первый, кажется, поток - я понял.Но второе было написано «FileName».Что это должно быть?Если я создаю из потока, зачем мне сообщать Sitecore имя файла?

Буду признателен за любую помощь.

Ответы [ 2 ]

4 голосов
/ 09 февраля 2012

Я думаю, что ваша проблема здесь в том, что вы не используете правильные параметры для вызова API Sitecore.У вас нет реального места назначения ... именно здесь вы бы указали элемент Sitecore, который станет вашим элементом ... а не просто папкой.Похоже, вы пытаетесь создать элемент библиотеки мультимедиа.

В соответствии с книгой Content API в SDN:

Как создавать элементы мультимедиа с помощью API

Вы можете использоватьклассы Sitecore.Resources.Media.MediaCreator и Sitecore.Resources.Media.MediaCreatorOptions для создания элементов мультимедиа из файлов.Например, чтобы создать элемент мультимедиа / Sitecore / Медиатека / Изображения / Образец в базе данных Master из файла C: \ temp \ sample.jpg:

Sitecore.Resources.Media.MediaCreatorOptions options =  new Sitecore.Resources.Media.MediaCreatorOptions();
options.Database = Sitecore.Configuration.Factory.GetDatabase("master");
options.Language = Sitecore.Globalization.Language.Parse(Sitecore.Configuration.Settings.DefaultLanguage);
options.Versioned = Sitecore.Configuration.Settings.Media.UploadAsVersionableByDefault;
options.Destination = "/sitecore/media library/images/Sample";
options.FileBased = Sitecore.Configuration.Settings.Media.UploadAsFiles;
Sitecore.Resources.Media.MediaCreator creator = new Sitecore.Resources.Media.MediaCreator();
Sitecore.Data.Items.MediaItem sample = creator.CreateFromFile(@"C:\temp\sample.jpg",options)
2 голосов
/ 09 июля 2012

Кори, я не уверен, что это все еще актуально, но я просто столкнулся с теми же вопросами, что и вы.@divamatrix на самом деле не ответил на вопросы потока, и я хотел бы заполнить этот вопрос на тот случай, если кому-то (или мне снова) понадобятся ответы.

Что такое свойство "Destination" для MediaCreatorOptions?

Как указывало @divamatrix, свойство Destination в MediaCreatorOptions - это место, где вы хотите, чтобы ваш MediaItem находился в библиотеке мультимедиа Sitecore (например, / sitecore / Media Library / Images /Created Image)

Это просто папка?Предполагается, что он также должен иметь имя элемента?

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

Какие три параметра для метода CreateFromStream?Первый, кажется, поток - я понял.Но второе было написано «FileName».Что это должно быть?Если я создаю из потока, почему я должен сообщить Sitecore имя файла?

Имя файла игнорируется, если вы установите Destination с помощью MediaCreatorOptions, потому что метод GetItemPath простовернуть options.Destination, если не ноль или пусто.Если вы не укажете Destination, метод GetItemPath попытается найти лучший путь в библиотеке мультимедиа.По сути, при использовании CreateFromStream (насколько я могу судить) установите Destination в MediaCreatorOptions или установите filePath в том месте, где вы хотели бы видеть свой элемент, а метод GetItemPath попытается поместитьон есть, но может выдавать исключения, если он не может.

...