2012-10-10 9 views
6

Ich habe eine Anforderung, wo ich binäre Datei einer Multimedia-Komponente herunterladen muss, aber wenn ich auf die Eigenschaften der BinaryContentData Klasse zugreifen dann gibt es keine Eigenschaft zum Herunterladen einer Bilddatei . Obwohl zum Hochladen von Dateien, Core Service haben eine Eigenschaft nämlich UploadFromFile.Tridion-Kern-Service Wie binäre Datei einer Multimedia-Komponente herunterladen

So gibt es eine Möglichkeit, Binärdatei an einen temporären Speicherort zu downloaden. Unten ist der Code, den ich verwende:

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; 

Bitte vorschlagen.

Antwort

5

Es gibt eine Hilfsfunktion namens streamDownloadClient.DownloadBinaryContent innerhalb Tridion.ContentManager.CoreService.Client.dll, die Sie verwenden können.

Ich habe die folgende Funktion erstellt, die ich in der Regel für diesen Zweck wiederverwendet werden:

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

Für obigen Code verwenden, können Sie auch Größe erhöhen müssen von folgenden Attribute in ‚streamDownload_basicHttp_2010‘ Endpunkt: - MaxBufferSize = "1073741824 "maxBufferPoolSize =" 1073741824 "maxReceivedMessageSize =" 1073741824 ". Standardmäßig haben sie einen Wert wie "65536" –

+0

Sie müssen diesen Code möglicherweise verwenden, um die richtige Dateipfadzeichenfolge zu erhalten file = "D: \\ MyTempLocation \\" + Path.GetFileName (multimediaComponent.BinaryContent.Filename); –