5

这是我尝试过的,它似乎不起作用。我没有收到任何错误,但似乎也没有将文件添加到媒体库中。

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 方法的三个参数是什么?第一个似乎是 Stream - 我明白了。但第二个是“文件名”。这应该是什么?如果我是从 Stream 创建的,为什么我需要告诉 Sitecore 文件名?

任何帮助,将不胜感激。

4

2 回答 2

4

我认为您的问题是您没有为 Sitecore API 调用使用正确的选项。您没有真正的目的地。您可以在其中指定将成为您的项目的 Sitecore 项目...而不仅仅是一个文件夹。您似乎正在尝试创建媒体库项目。

根据 SDN 上的 Content API Book:

如何使用 API 创建媒体项目

您可以使用 Sitecore.Resources.Media.MediaCreator 和 Sitecore.Resources.Media.MediaCreatorOptions 类从文件创建媒体项目。例如,要从文件 C:\temp\sample.jpg 在主数据库中创建媒体项目 /Sitecore/Media Library/Images/Sample:

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)
于 2012-02-09T00:27:36.943 回答
2

科里,我不确定这是否仍然相关,但我遇到了与您完全相同的问题。@divamatrix 并没有真正回答流问题,我想填写这个问题,以防其他人(或我自己)需要答案。

MediaCreatorOptions 的“目标”属性是什么?

正如@divamatrix 所指出的,您希望您的MediaItem 存在于Sitecore 媒体库中的Destination属性是(例如/sitecore/Media Library/Images/Created Image)MediaCreatorOptions

它应该只是一个文件夹吗?它也应该有项目名称吗?

不,它不应该是媒体库中当前文件夹的名称。它应该是您想要创建的项目的路径,包括您想要创建的项目的名称(见上文)。

CreateFromStream 方法的三个参数是什么?第一个似乎是 Stream - 我明白了。但第二个是“文件名”。这应该是什么?如果我是从 Stream 创建的,为什么我需要告诉 Sitecore 文件名?

如果您使用 设置 ,则忽略文件名DestinationMediaCreatorOptions因为该GetItemPath方法只会options.Destination在不为空或为空时返回。如果不设置Destination,该GetItemPath方法会尽量在媒体库中给你一个合适的路径。从本质上讲,当使用 CreateFromStream 时(据我所知),设置DestinationinMediaCreatorOptions或设置filePath为您希望项目所在的位置,该GetItemPath方法将尝试将其放在那里,但如果无法将其放在那里,则可能会抛出异常.

于 2012-07-09T14:21:04.723 回答