1

我创建了一个创建到 MemoryStream 的 iTextSharp PDF 文件。但我现在需要将此文件传递给 Kentico 媒体库。

如果有人能告诉我如何做到这一点,我将不胜感激。我目前的代码是:

//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 文件结合使用?

4

3 回答 3

1

实际上,我认为您不需要做任何 RadekM 所说的事情。您可以简单地将文件流式传输到磁盘以将其保存,然后调用您正在使用的导入方法将其导入媒体库。

例如,站点“MySite”的名为“Site Images”的媒体库将在磁盘上有一个文件夹/MySite/media/Site Images/。将您的文件放到那里(如果需要,您可以使用子文件夹)。此时该文件“在”媒体库中,但尚未导入,因此您将无法使用它。通过查看 CMS Desk 界面中的媒体库,您可以看到这是真的。但是,此文件尚未导入媒体库,您应该会在新文件旁边的黄色三角形内看到一个感叹号。

因此,在您将文件放在正确的位置后,您可以使用该文件信息来填充 MediaFileInfo 对象并导入文件。

于 2011-09-09T15:21:16.487 回答
1

您能否修改此代码并从此处传递 PDF 的字节?

以编程方式将文件添加到 Kentico 媒体库

于 2011-12-19T05:29:38.197 回答
0

遗憾的是,MemoryStream 类不包含这些信息,因此您无法直接从该对象中获取它们。无论如何,如果您想提供FileSize属性,您可以使用ms.Length属性作为解决方法。基本上,这个特定的属性并不重要,所以它甚至可以是一些虚拟数字。至于扩展 - 你是说你收到错误说这个属性是空的,虽然你设置它像„fileInfo.FileExtension =“.pdf”;“?你能澄清一下吗?另请注意,您需要设置一些其他属性,FileSiteID、FileCreatedWhen、FileGUIDFilePath(给定媒体库中的路径)。如果你有 Kentico API 的完整源代码,你可以从\MediaLibrary\MediaFileInfo.cs类中的MediaFileInfo对象。

于 2011-09-09T08:58:09.543 回答