2011-09-08 76 views
1

我創建了一個創建到MemoryStream的iTextSharp PDF文件。但是我現在需要將這個文件傳遞給Kentico媒體庫。Kentico - 將MemoryStream文件傳遞給MediaFileInfo API

如果有人能告訴我如何做到這一點,我將不勝感激。我目前的代碼是:

//Media Library Info - takes Media Library Name and Website Name 
     MediaLibraryInfo libraryInfo = MediaLibraryInfoProvider.GetMediaLibraryInfo("MyLibrary", CMSContext.CurrentSiteName); 

     //Folder in Media Library where Item will be Inserted 
     string mediaLibraryFolder = folder; 

     //create media file info item - takes the relative path to the document, the library ID, and the folder name where the document will be located within the media library 
     MediaFileInfo fileInfo = new MediaFileInfo(); 

     fileInfo.FileLibraryID = libraryInfo.LibraryID; 
     fileInfo.FileBinaryStream = file; 
     fileInfo.FileName = title.Replace(" ", "").Trim(); 
     fileInfo.FileTitle = title; 
     fileInfo.FileDescription = description; 
     fileInfo.FileExtension = ".pdf"; 
     fileInfo.FileMimeType = "application/pdf"; 
     fileInfo.FilePath = String.Concat("/", folder, "/", title.Replace(" ", "").Trim(), ".pdf"); 

     // Save media file info 
     MediaFileInfoProvider.ImportMediaFileInfo(fileInfo); 

我一直收到由於可空列爲例的數據庫錯誤, FileSize,FileExtension等。由於我正在使用MemoryStream,因此無法找到提供所有信息的方法。

我是否將MediaFileInfo API錯誤地與MemoryStream文件結合使用?

回答

1

實際上,我認爲你不需要做RadekM所說的任何事情。您可以簡單地將文件流式傳輸到磁盤以進行保存,然後調用您正在使用的導入方法將其導入到媒體庫中。

例如,名爲「站點圖像」的網站「MySite」的媒體庫將在磁盤上有一個文件夾/MySite/media/Site Images/。把你的文件放到那裏(如果你願意,你可以使用子文件夾)。此時該文件位於媒體庫中,但尚未導入,因此您無法使用它。您可以通過查看CMS Desk界面中的媒體庫來看到這種情況。但是,該文件尚未導入到媒體庫中,您應該在新文件旁邊的黃色三角形內看到感嘆號。

因此,當您在正確的位置獲取文件後,可以使用該文件信息來填充MediaFileInfo對象並導入該文件。

+0

我明白這是有道理的。謝謝約翰! – R100

+0

沒問題!很高興我能幫上忙。隨時upvote,如果你想:D –

+0

Upvote完成! :-) – R100

0

遺憾的是,MemoryStream類不包含這些信息,因此您無法直接從此對象獲取它們。無論如何,如果您想要提供FileSize屬性,則可以使用ms.Length屬性作爲解決方法。基本上,這個特殊的屬性並不重要,所以它甚至可以是一些虛擬的數字。 至於擴展 - 你是說你收到錯誤說這個屬性爲空,儘管你把它設置爲「fileInfo.FileExtension =」.pdf「;」?你能澄清嗎? 另請注意,您需要設置一些其他屬性,FileSiteID,FileCreatedWhen,FileGUIDFilePath(給定媒體庫中的路徑)。如果您有完整的Kentico API源代碼,您可以從MediaFileInfo對象的構造函數\ MediaLibrary \ MediaFileInfo.cs類中獲得靈感。