2012-10-10 7 views
6

Bir multimedya bileşeninin ikili dosyasını indirmem gerektiğine dair bir gereksinimim var, ancak BinaryContentData sınıfının etkilenen özelliklerine eriştiğimde bir resim dosyası indirmek için özellik yok . Dosyayı yüklemek için, Core Service'in bir özelliği UploadFromFile olmalıdır.Tridion core service Bir çoklu ortam bileşeninin ikili dosyası nasıl karşıdan yüklenir

İkili dosyayı geçici konuma indirmek için bir yol var. Kullanmakta olduğum kod aşağıdadır:

core_service.ServiceReference1.SessionAwareCoreService2010Client client = new SessionAwareCoreService2010Client(); 
client.ClientCredentials.Windows.ClientCredential.UserName = "myUserName"; 
client.ClientCredentials.Windows.ClientCredential.Password = "myPassword"; client.Open(); 
ComponentData component = (ComponentData)client.TryCheckOut(
          multimediaComponentURI, new ReadOptions()); 
BinaryContentData binaryData = component.BinaryContent; 

Lütfen Öneriniz.

cevap

5

Tridion.ContentManager.CoreService.Client.dll içinde bulunan streamDownloadClient.DownloadBinaryContent adlı bir yardımcı işlev vardır.

Ben genellikle bu amaç için yeniden aşağıdaki işlevi oluşturduk: kodunun üzerinde kullanmak için

private static void CreateBinaryFromMultimediaComponent(string tcm) 
{ 
    Tridion.ContentManager.CoreService.Client.StreamDownloadClient streamDownloadClient = new StreamDownloadClient(); 
    SessionAwareCoreServiceClient client = new SessionAwareCoreServiceClient("netTcp_2011"); 

    ComponentData multimediaComponent = client.Read(tcm, new ReadOptions()) as ComponentData; 

    // Generate you own file name, and file location 
    string file = "D:\\MyTempLocation\\" + Path.GetFilename(multimediaComponent.BinaryContent.Filename);;  

    // Write out the existing file from Tridion 
    FileStream fs = File.Create(file); 
    byte[] binaryContent = null; 

    if (multimediaComponent.BinaryContent.FileSize != -1) 
    { 
     Stream tempStream = streamDownloadClient.DownloadBinaryContent(tcm); 
     var memoryStream = new MemoryStream(); 
     tempStream.CopyTo(memoryStream); 
     binaryContent = memoryStream.ToArray(); 
    } 

    fs.Write(binaryContent, 0, binaryContent.Length); 
    fs.Close(); 
} 
+0

, ayrıca 'streamDownload_basicHttp_2010' son nokta içinde özelliklerini aşağıdaki boyutunu artırmak gerekebilir: - MaxBufferSize = "1073741824 "maxBufferPoolSize =" 1073741824 "maxReceivedMessageSize =" 1073741824 ". Varsayılan olarak "65536" –

+0

olarak değerlere sahip olabilirsiniz. Bu dosyayı, doğru dosya yolu dizesi dosyası = "D: \\ MyTempLocation \\" + Path.GetFileName (multimediaComponent.BinaryContent.Filename) almak için kullanmanız gerekebilir; –