9

我想使用核心服务将 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);
}    
4

2 回答 2

5

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

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

于 2012-05-04T11:23:41.693 回答
4

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

  1. 使用 . 文件将二进制数据上传到 Tridion 服务器StreamUploadClient。这将返回 Tridion 服务器上文件的路径。
  2. 创建一个BinaryContentData指向 Tridion 服务器上的文件的文件(因此使用从第 1 步返回的路径)
  3. 创建一个ComponentData引用BinaryContentData来自步骤 2的
  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 的原始代码正是这样做的。

于 2012-05-04T13:42:10.467 回答