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 タイプのスキーマを使用するようにしてください。

于 2012-05-04T11:23:41.693 に答える
4

コア サービスを使用して Tridion にバイナリをアップロードするプロセスは次のとおりです。

  1. を使用して、バイナリ データを Tridion サーバーにアップロードしますStreamUploadClient。これにより、Tridion サーバー上のファイルのパスが返されます。
  2. BinaryContentDataTridion サーバー上のファイルを指す を作成します (手順 1 で取得したパスを使用します)。
  3. 手順 2ComponentDataの を参照する を作成します。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;

ライアンの元のコードがまさにそれを行うことに注意してください。

于 2012-05-04T13:42:10.467 に答える