2012-10-10 11 views
6

Tengo un requisito donde necesito descargar un archivo binario de un componente multimedia pero cuando tengo acceso a las propiedades expuestas de la clase BinaryContentData no hay propiedad para descargar un archivo de imagen . Aunque para cargar archivos, Core Service tiene una propiedad llamada UploadFromFile.Servicio Tridion Core Cómo descargar archivos binarios de un componente multimedia

Entonces, hay una manera de descargar archivos binarios a una ubicación temporal. Debajo está el código que estoy usando:

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; 

Por favor, sugiera.

Respuesta

5

Hay una función auxiliar llamada streamDownloadClient.DownloadBinaryContent dentro de Tridion.ContentManager.CoreService.Client.dll que puede utilizar.

He creado la siguiente función que suelo volver a usar con ese propósito:

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

Para usar el código anterior, también puede ser necesario para aumentar el tamaño de los siguientes atributos en punto final 'streamDownload_basicHttp_2010': - MaxBufferSize = "1073741824 "maxBufferPoolSize =" 1073741824 "maxReceivedMessageSize =" 1073741824 ". De forma predeterminada, tienen el valor "65536" –

+0

, es posible que necesite utilizar este código para obtener la cadena de ruta de archivos adecuada file = "D: \\ MyTempLocation \\" + Path.GetFileName (multimediaComponent.BinaryContent.Filename); –

Cuestiones relacionadas