2012-05-04 2 views
9

コアサービスを使用して、PDF、Word、およびExcelファイルをSDL Tridion 2011にプッシュしたいとします。コアサービスを使用して外部ファイルをSDL Tridion 2011にインポートするにはどうすればよいですか?

私はコードの下にしようとしたが、このエラーを取得:

Invalid value for property 'BinaryContent'. Unable to open uploaded file:

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); 
}  

答えて

5

をすべてのバイナリファイルは、同じように扱われhttp://blog.building-blocks.com/uploading-images-using-the-core-service-in-sdl-tridion-2011

ここでライアンの優秀な記事の読み取りを持っている - ので、画像のための彼の技術をドキュメントにも同様に有効ですが、適切なMIMEタイプのスキーマを使用していることを確認してください。

+0

@ Chris。私はそのコードを試しましたが、エラーが発生しました。 binaryContent.MultimediaType = new LinkToMultimediaTypeData(){IdRef = id};私はjpgファイルをしようとすると、私はこのIDを取得する方法を知らせることができますか? プロジェクトにはapp.configはありません ありがとうございます – Aquarius24

+0

質問を更新して、あなたのコードを表示し、受け取ったエラーを共有することができます。 もう1つの注意点 - http://area51.stackexchange.com/proposals/38335/tridion?referrer=eo63snjNlUWNn9xqeeO2NA2へのコミットを検討しますか?スタックエクスチェンジで専用のSDL Tridion領域を取得しようとしています。あなたのSOアカウントを使用してください。ここで大きな質問は、 –

+0

というエラーになります。 プロパティ 'BinaryContent'の値が無効です。アップロードしたファイルを開くことができません – Aquarius24

4

コアサービスを使用してTridionのにバイナリをアップロードするためのプロセスである:

  1. StreamUploadClientを用いTridionのサーバーにバイナリデータをアップロード。これにより、Tridionサーバー上のファイルのパスが返されます。
  2. ステップ2
  3. 保存ComponentData
  4. から BinaryContentDataを指し ComponentDataを作成
  5. (ステップ1から戻ったパスを持つようにする)Tridionのサーバー上のファイルを指すBinaryContentDataを作成します。

あなたは、ステップ2

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

でファイルのローカルパスを設定している。しかしTridionのはできなくなりますそのファイルを見つけてください。 Ryan's original codeは、まさにそのことを

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; 

注:あなたの代わりにあなたがUploadBinaryContentから戻ったパスを設定する必要があります。

+0

@ puf。どうもありがとう。それは私をたくさん助けて、今私は任意のファイルをアップロードすることができる – Aquarius24

+0

@フランク:私のローカルマシンからのコアサービスを使用してマルチメディアコンポーネントを作成するためには、そのapp.configは必須ですか?つまり、すべての画像がローカルマシンにあります。画像がサーバーにある場合、コアサービスを使用してマルチメディアコンポーネントを作成することができます。しかし、私は私のローカルから同じことを期待しています。 – user1428019

+0

すべてのコアサービスクライアントは、.configファイル(http://code.google.com/p/tridion-practice/wiki/GetCoreServiceClientWithConfigFileを参照)を使用するか、または.configファイルを使用してTridion Content Managerに接続する方法を指示する必要があります。コード(http://code.google.com/p/tridion-practice/wiki/GetCoreServiceClientWithoutConfigFileを参照)。 –

関連する問題