【问题标题】:How can I import external files into SDL Tridion 2011 using core service?如何使用核心服务将外部文件导入 SDL Tridion 2011?
【发布时间】:2012-05-13 22:03:47
【问题描述】:

我想使用核心服务将 PDF、Word 和 Excel 文件推送到 SDL Tridion 2011。

我尝试了下面的代码,但得到了这个错误:

属性“BinaryContent”的值无效。无法打开上传的文件:

using (ChannelFactory<ISessionAwareCoreService> factory =
    new ChannelFactory<ISessionAwareCoreService>("wsHttp_2011"))
{
  ISessionAwareCoreService client = factory.CreateChannel();
  ComponentData multimediaComponent = (ComponentData)client.GetDefaultData(
                                       ItemType.Component, "tcm:19-483-2");
  multimediaComponent.Title = "MultimediaFile";

  multimediaComponent.ComponentType = ComponentType.Multimedia;
  multimediaComponent.Schema.IdRef = "tcm:19-2327-8";

  using (StreamUploadClient streamClient = new StreamUploadClient())
  {
    FileStream objfilestream = new FileStream(@"\My Documents\My Poc\images.jpg",
                                              FileMode.Open, FileAccess.Read);
    string tempLocation = streamClient.UploadBinaryContent("images.jpg",
                                                           objfilestream);
  }
  BinaryContentData binaryContent = new BinaryContentData();
  binaryContent.UploadFromFile = @"C:\Documents and Settings\My Poc\images.jpg";
  binaryContent.Filename = "images.jpg";
  binaryContent.MultimediaType = new LinkToMultimediaTypeData()
  {
    IdRef ="tcm:0-2-65544"
  };
  multimediaComponent.BinaryContent = binaryContent;

  IdentifiableObjectData savedComponent = client.Save(multimediaComponent,
                                                      new ReadOptions());

  client.CheckIn(savedComponent.Id, null);
  Response.Write(savedComponent.Id);
}    

【问题讨论】:

    标签: tridion


    【解决方案1】:

    使用核心服务将二进制文件上传到 Tridion 的过程是:

    1. 使用StreamUploadClient 将二进制数据上传到 Tridion 服务器。这将返回文件在 Tridion 服务器上的路径。
    2. 创建一个 BinaryContentData 指向 Tridion 服务器上的文件(因此使用您从第 1 步返回的路径)
    3. 创建一个 ComponentData 引用第 2 步中的 BinaryContentData
    4. 保存ComponentData

    您正在第 2 步中设置文件的本地路径。

    binaryContent.UploadFromFile = @"C:\Documents and Settings\My Poc\images.jpg";
    

    但是 Tridion 将永远无法在那里找到该文件。相反,您应该设置从UploadBinaryContent 返回的路径:

    string tempLocation;
    using (StreamUploadClient streamClient = new StreamUploadClient())
    {
      FileStream objfilestream = new FileStream(@"\My Documents\My Poc\images.jpg",
                                                FileMode.Open, FileAccess.Read);
      tempLocation = streamClient.UploadBinaryContent("images.jpg", objfilestream);
    }
    BinaryContentData binaryContent = new BinaryContentData();
    binaryContent.UploadFromFile = tempLocation;
    

    请注意,Ryan's original code 正是这样做的。

    【讨论】:

    • @ puf 。非常感谢。它对我帮助很大,我现在可以上传任何文件
    • @Frank:app.config 是否必须使用本地机器上的核心服务创建多媒体组件?我的意思是(所有图像都在我的本地机器中)。当图像在服务器中时,我可以使用核心服务创建多媒体组件。但我对当地人的期望也一样。
    • 每个核心服务客户端都需要被指示如何连接到 Tridion Content Manager,或者通过 .config 文件(参见 code.google.com/p/tridion-practice/wiki/…)或通过代码中的类似设置(参见 code.google.com/p/tridion-practice/wiki/…)。
    【解决方案2】:

    在此处阅读 Ryan 的优秀文章 http://blog.building-blocks.com/uploading-images-using-the-core-service-in-sdl-tridion-2011

    所有二进制文件都以相同的方式处理 - 因此他的图像技术对文档同样有效,只需确保使用具有适当 mime 类型的 Schema。

    【讨论】:

    • @克里斯。我尝试了该代码,但出现错误。 binaryContent.MultimediaType = new LinkToMultimediaTypeData() { IdRef = id };我正在尝试一个jpg文件你能告诉我如何获得这个ID吗?我的项目中没有 app.config 提前谢谢
    • 也许你可以更新你的问题,解释你做了什么,显示你的代码,并分享你收到的错误。另一方面,您是否考虑提交给area51.stackexchange.com/proposals/38335/…,我们正在尝试在 Stack Exchange 上获得一个专用的 SDL Tridion 区域。请使用您的 SO 帐户,以便您在此处提出的重要问题计入提案
    • 出现以下错误:属性“BinaryContent”的值无效。无法打开上传的文件
    • 您能用您的示例代码更新您的问题吗?没有它很难帮助你。似乎您的二进制文件无法访问或其他什么。
    • @Puf 现在已经清楚地解释了这一点 - 您错过了开始共享的示例中的关键步骤。你的代码现在工作了吗?请考虑通过area51.stackexchange.com/proposals/38335/… 提交提案,我们需要每个 Tridion 开发人员的帮助才能实现这一目标。
    猜你喜欢
    • 1970-01-01
    • 2012-04-21
    • 2012-04-11
    • 1970-01-01
    • 2012-07-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 2012-12-30
    相关资源
    最近更新 更多