2012-05-04 9 views
9

Desidero trasferire file PDF, Word ed Excel in SDL Tridion 2011 utilizzando il servizio di base.Come posso importare file esterni in SDL Tridion 2011 utilizzando il servizio principale?

ho cercato qui di seguito il codice, ma questo errore:

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

risposta

5

Avere una lettura di eccellente articolo di Ryan qui http://blog.building-blocks.com/uploading-images-using-the-core-service-in-sdl-tridion-2011

Tutti i file binari vengono gestiti nello stesso modo - così la sua tecnica per le immagini sarà altrettanto valido per i documenti, ma assicurati di utilizzare uno schema con i tipi di mime appropriati.

+0

@ Chris. Ho provato quel codice ma ho ricevuto un errore. binaryContent.MultimediaType = new LinkToMultimediaTypeData() {IdRef = id}; sto cercando un file jpg puoi farmi sapere come ottenere questo ID? Non c'è app.config nel mio progetto Grazie in anticipo – Aquarius24

+0

Forse puoi aggiornare la tua domanda spiegando cosa hai fatto, mostrare il tuo codice e condividere l'errore che stai ricevendo. Su un'altra nota - Prenderesti in considerazione l'idea di impegnarti a http://area51.stackexchange.com/proposals/38335/tridion?referrer=eo63snjNlUWNn9xqeeO2NA2 stiamo cercando di ottenere un'area dedicata di Tridion SDL su Stack Exchange. Utilizza il tuo account SO in modo che le tue fantastiche domande contino per la proposta –

+0

ottenendo l'errore seguente: Valore non valido per la proprietà "BinaryContent". Impossibile aprire il file caricato – Aquarius24

4

Il processo per il caricamento di file binari in Tridion utilizzando il servizio principale è:

  1. caricare i dati binari al server utilizzando un Tridion StreamUploadClient. Questo ti restituisce il percorso del file sul server Tridion.
  2. Creare un BinaryContentData che punta al file sul server Tridion (quindi con il percorso che hai di nuovo dal punto 1)
  3. Creare un ComponentData che si riferisce alla la BinaryContentData dal punto 2
  4. Salvare il ComponentData

si imposta il percorso locale per il file nel passaggio 2.

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

Ma Tridion sarà mai in grado per trovare quel file lì. È invece necessario impostare il percorso che avete ottenuto indietro da 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; 

Si noti che il Ryan's original code fa esattamente questo.

+0

@ puf. Molte grazie. Mi ha aiutato molto e ora posso caricare qualsiasi file – Aquarius24

+0

@Frank: è necessario app.config per creare i componenti multimediali utilizzando il servizio di base dalla mia macchina locale? Voglio dire (tutte le immagini sono nella mia macchina locale).e sono in grado di creare componenti multimediali utilizzando il servizio principale, quando le immagini sono nel server. Ma mi aspetto lo stesso dal mio locale. – user1428019

+0

Ogni client del servizio principale deve essere istruito su come connettersi a Tridion Content Manager, tramite un file .config (consultare http://code.google.com/p/tridion-practice/wiki/GetCoreServiceClientWithConfigFile) o tramite impostazioni simili in codice (consultare http://code.google.com/p/tridion-practice/wiki/GetCoreServiceClientWithoutConfigFile). –

Problemi correlati