2011-09-08 31 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类中获得灵感。