如何使用ASP FileUpload控件在代码中将文件上载到Sitecore媒体库?

时间:2012-01-23 15:11:09

标签: sitecore sitecore6 sitecore-media-library

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

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?

任何帮助都将不胜感激。

2 个答案:

答案 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)

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

  

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

正如@divamatrix指出的那样,Destination中的MediaCreatorOptions属性是您希望MediaItem存在于Sitecore媒体库中的位置(例如/ sitecore /媒体库/图像/创建的图像)

  

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

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

  

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

如果您使用Destination设置MediaCreatorOptions,则会忽略文件名,因为GetItemPath方法只会返回options.Destination,如果不为空或空。如果您未设置Destination,则GetItemPath方法会尝试在媒体库中为您提供正确的路径。本质上,当使用CreateFromStream时(据我所知),在Destination中设置MediaCreatorOptions,或将filePath设置为您希望项目所在的位置和{{ 1}}方法会尝试将它放在那里,但如果它不能,则可能抛出异常。