这是我尝试过的,似乎没有用。我没有收到任何错误,但它似乎也没有将文件添加到媒体库。
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”。这应该是什么?如果我是从Stream创建的,为什么我需要告诉Sitecore FileName?
任何帮助都将不胜感激。
答案 0 :(得分:4)
我认为您的问题是您没有使用Sitecore API调用的正确选项。您没有真正的目的地..在这里您将指定将成为您的项目的Sitecore项目...而不仅仅是一个文件夹。看起来您正在尝试创建媒体库项目。
根据SDN上的Content API Book:
如何使用API创建媒体项
您可以使用Sitecore.Resources.Media.MediaCreator和 Sitecore.Resources.Media.MediaCreatorOptions类用于从文件创建媒体项。 例如,要创建媒体项/ Sitecore /媒体库/图像/示例 来自文件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)
答案 1 :(得分:2)
MediaCreatorOptions的“目的地”属性是什么?
正如@divamatrix指出的那样,Destination
中的MediaCreatorOptions
属性是您希望MediaItem存在于Sitecore媒体库中的位置(例如/ sitecore /媒体库/图像/创建的图像)
它应该只是一个文件夹吗?是否应该有项目名称?
不,它不应该是媒体库中当前文件夹的名称。它应该是您想要创建的项目的路径,包括您要创建的项目的名称(见上文)。
CreateFromStream方法的三个参数是什么?第一个似乎是流 - 我明白了。但第二个是“FileName”。这应该是什么?如果我是从Stream创建的,为什么我需要告诉Sitecore FileName?
如果您使用Destination
设置MediaCreatorOptions
,则会忽略文件名,因为GetItemPath
方法只会返回options.Destination
,如果不为空或空。如果您未设置Destination
,则GetItemPath
方法会尝试在媒体库中为您提供正确的路径。本质上,当使用CreateFromStream时(据我所知),在Destination
中设置MediaCreatorOptions
,或将filePath
设置为您希望项目所在的位置和{{ 1}}方法会尝试将它放在那里,但如果它不能,则可能抛出异常。