2012-01-23 9 views
5

Ecco cosa ho provato e non sembra funzionare. Non ho alcun errore, ma non sembra che aggiunga il file al catalogo multimediale.Come posso caricare un file nel catalogo multimediale di Sitecore in codice utilizzando un controllo ASP FileUpload?

using(new Sitecore.SecurityModel.SecurityDisabler()) 
{ 
    if(myFileControl.HasFile) 
    { 
    MediaCreatorOptions _options = new MediaCreatorOptions(); 
    _options.Database = Factory.GetDatabase("master"); 
    _options.FileBased = false; 
    _options.IncludeExtensionInItemName = false; 
    _options.KeepExisting = false; 
    _options.Versioned = false; 
    _options.Destination = "/sitecore/media library"; 
    MediaItem _newFile = MediaManager.Creator.CreateFromStream(myFileControl.FileContent, myFileControl.FileName, _options); 
    } 
} 

Il mio problema più grande è che non capisco veramente quali sono alcuni dei diversi parametri e proprietà. Qual è la proprietà "Destinazione" per MediaCreatorOptions? Dovrebbe essere solo una cartella? Dovrebbe avere anche il nome dell'oggetto? Quali sono i tre parametri per il metodo CreateFromStream? Il primo sembra essere il flusso: lo capisco. Ma il secondo era "FileName". Cosa dovrebbe essere? Se sto creando da uno Stream perché devo dire a Sitecore il FileName?

Qualsiasi aiuto sarebbe apprezzato.

risposta

4

Penso che il tuo problema qui sia che non stai utilizzando le opzioni corrette per la chiamata all'API Sitecore. Non hai una vera destinazione .. che è dove specificheresti l'oggetto Sitecore che diventerà il tuo oggetto ... non solo una cartella. Sembra che tu stia cercando di creare l'elemento della libreria multimediale.

Per il Content API Prenota SDN:

Come creare prodotti che multimediale utilizzando le API

È possibile utilizzare il Sitecore.Resources.Media.MediaCreator e classi Sitecore.Resources.Media.MediaCreatorOptions per creare elementi multimediali dai file. Ad esempio, per creare l'elemento media/Sitecore/Mediateca/immagini/campione nel database master dal file C: \ temp \ sample.jpg:

Sitecore.Resources.Media.MediaCreatorOptions options = new Sitecore.Resources.Media.MediaCreatorOptions(); 
options.Database = Sitecore.Configuration.Factory.GetDatabase("master"); 
options.Language = Sitecore.Globalization.Language.Parse(Sitecore.Configuration.Settings.DefaultLanguage); 
options.Versioned = Sitecore.Configuration.Settings.Media.UploadAsVersionableByDefault; 
options.Destination = "/sitecore/media library/images/Sample"; 
options.FileBased = Sitecore.Configuration.Settings.Media.UploadAsFiles; 
Sitecore.Resources.Media.MediaCreator creator = new Sitecore.Resources.Media.MediaCreator(); 
Sitecore.Data.Items.MediaItem sample = creator.CreateFromFile(@"C:\temp\sample.jpg",options) 
2

Corey, io non sono sicuro se questo è ancora rilevante, ma mi sono imbattuto nelle stesse identiche domande che hai fatto. @divamatrix non ha davvero risposto alle domande sul flusso e vorrei compilare questa domanda nel caso in cui qualcun altro (o me stesso di nuovo) necessitasse delle risposte.

Qual è la proprietà "Destinazione" per MediaCreatorOptions?

Come @divamatrix ha sottolineato, la proprietà Destination in MediaCreatorOptions è dove si vuole che il proprio MediaItem vivere nel Sitecore Media Library (es./Sitecore/Mediateca/Immagini/Immagine Creato)

Si suppone che sia solo una cartella? Dovrebbe avere anche il nome dell'oggetto?

No, non dovrebbe essere il nome di una cartella attualmente nel catalogo multimediale. Dovrebbe essere il percorso dell'articolo che desideri venga creato, incluso il nome dell'elemento che desideri venga creato (vedi sopra).

Quali sono i tre parametri per il metodo CreateFromStream? Il primo sembra essere il flusso: lo capisco. Ma il secondo era "FileName". Cosa dovrebbe essere? Se sto creando da uno Stream perché devo dire a Sitecore il FileName?

Il nome del file viene ignorato se si imposta il Destination con l'MediaCreatorOptions perché il metodo GetItemPath sarà solo tornare options.Destination se non nullo o vuoto. Se non si imposta Destination, il metodo GetItemPath proverà a ottenere il percorso corretto nella libreria multimediale. In sostanza, quando usi CreateFromStream (per quanto posso dire), imposta Destination in MediaCreatorOptions oppure imposta lo filePath nel punto in cui desideri che il tuo articolo sia e il metodo GetItemPath proverà a inserirlo, ma può generare eccezioni se non è in grado di

Problemi correlati