【问题标题】:How can I upload a file to the Sitecore media library in code using an ASP FileUpload control?如何使用 ASP FileUpload 控件在代码中将文件上传到 Sitecore 媒体库?
【发布时间】:2012-01-23 15:11:09
【问题描述】:

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

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 FileName?

任何帮助将不胜感激。

【问题讨论】:

    标签: sitecore sitecore6 sitecore-media-library


    【解决方案1】:

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

    根据 SDN 上的 Content API Book:

    如何使用 API 创建媒体项目

    您可以使用 Sitecore.Resources.Media.MediaCreator 和 Sitecore.Resources.Media.MediaCreatorOptions 类从文件创建媒体项目。 例如,要在 来自文件 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】:

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

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

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2013-01-29
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-29
        • 2012-12-27
        • 2016-04-01
        相关资源
        最近更新 更多