2012-05-04 8 views
9

Quiero enviar archivos PDF, Word y Excel a SDL Tridion 2011 mediante el uso del servicio central.¿Cómo puedo importar archivos externos a SDL Tridion 2011 usando el servicio central?

me trataron a continuación código, pero este error:

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

Respuesta

5

tener una lectura del excelente artículo de Ryan aquí http://blog.building-blocks.com/uploading-images-using-the-core-service-in-sdl-tridion-2011

Todos los archivos binarios se manejan de la misma manera - por lo que su técnica de imágenes será igualmente válido para los documentos, solo asegúrese de usar un esquema con los tipos de mime apropiados.

+0

@ Chris. Intenté ese código pero obtuve un error. binaryContent.MultimediaType = new LinkToMultimediaTypeData() {IdRef = id}; Estoy tratando de encontrar un archivo jpg. ¿Me pueden decir cómo obtener esta identificación? No hay aplicación.config en mi proyecto Gracias de antemano – Aquarius24

+0

Quizás pueda actualizar su pregunta explicando lo que ha hecho, mostrar su código y compartir el error que está recibiendo. En otra nota: ¿consideraría comprometerse a http://area51.stackexchange.com/proposals/38335/tridion?referrer=eo63snjNlUWNn9xqeeO2NA2 estamos tratando de obtener un área SDL Tridion dedicada en Stack Exchange. Utilice su cuenta SO para que sus preguntas importantes cuenten para la propuesta –

+0

obteniendo el siguiente error: Valor no válido para la propiedad 'Contenido binario'. No se puede abrir el archivo cargado – Aquarius24

4

El proceso para subir archivos binarios en Tridion utilizando el Servicio básico es:

  1. cargar los datos binarios al servidor usando un Tridion StreamUploadClient. Esto le devuelve la ruta del archivo en el servidor de Tridion.
  2. Crear un BinaryContentData que apunta al archivo en el servidor Tridion (por lo que con el camino que volviste del paso 1)
  3. Crear un ComponentData que se refiere a la del BinaryContentData desde el paso 2
  4. Guardar la ComponentData

está estableciendo la ruta local para su archivo en el paso 2.

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

Pero Tridion nunca será capaz para encontrar ese archivo allí. En su lugar, debe establecer la ruta que volviste de UploadBinaryContent:

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; 

Tenga en cuenta que la Ryan's original code hace exactamente eso.

+0

@ puf. Muchas gracias. Me ayudó mucho y ahora puedo cargar cualquier archivo – Aquarius24

+0

@Frank: ¿esa aplicación.config es obligatoria para crear los componentes multimedia usando el servicio central de mi máquina local? quiero decir (todas las imágenes están en mi máquina local).y puedo crear componentes multimedia usando el servicio principal, cuando las imágenes están en el servidor. Pero estoy esperando lo mismo de mi local. – user1428019

+0

Todos los clientes de Core Service deben recibir instrucciones sobre cómo conectarse a Tridion Content Manager, ya sea a través de un archivo .config (consulte http://code.google.com/p/tridion-practice/wiki/GetCoreServiceClientWithConfigFile) oa través de configuraciones similares en código (ver http://code.google.com/p/tridion-practice/wiki/GetCoreServiceClientWithoutConfigFile). –

Cuestiones relacionadas