2012-10-10 11 views
6

Mam wymaganie, w którym muszę pobrać plik binarny komponentu multimedialnego, ale kiedy mam dostęp do właściwości narażonych na klasę BinaryContentData, nie ma właściwości do pobrania pliku obrazu . Chociaż do przesłania pliku, usługa podstawowa ma właściwość, a mianowicie UploadFromFile.Tridion core service Jak pobrać plik binarny komponentu multimedialnego

Czy istnieje sposób pobrania pliku binarnego do lokalizacji tymczasowej. Poniżej znajduje się kod, którego używam:

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; 

Proszę sugerować.

Odpowiedz

5

Istnieje funkcja pomocnika o nazwie streamDownloadClient.DownloadBinaryContent wewnątrz Tridion.ContentManager.CoreService.Client.dll, której można użyć.

Stworzyłem następującą funkcję, która zwykle ponownego użycia w tym celu:

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

uzyskać stosując powyższy kod, może być konieczne, aby zwiększyć rozmiar z następujących atrybutów w końcowym „streamDownload_basicHttp_2010”: - maxBufferSize = "1073741824 "maxBufferPoolSize =" 1073741824 "maxReceivedMessageSize =" 1073741824 ". Domyślnie mają one wartość "65536" –

+0

, możesz potrzebować użyć tego kodu, aby uzyskać poprawny plik łańcuchowy pliku ścieżki = "D: \\ MyTempLocation \\" + Path.GetFileName (multimediaComponent.BinaryContent.Filename); –

Powiązane problemy