Kentico - передать файл MemoryStream в API MediaFileInfo - PullRequest
1 голос
/ 08 сентября 2011

Я создал PDF-файл iTextSharp, созданный для MemoryStream. Но теперь мне нужно передать этот файл в медиатеку 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, я не могу найти способ предоставить всю эту информацию.

Я неправильно использую API MediaFileInfo в сочетании с файлом MemoryStream?

Ответы [ 3 ]

1 голос
/ 09 сентября 2011

На самом деле, я не думаю, что вам нужно делать что-то, что сказал RadekM.Вы можете просто передать файл на диск, чтобы сохранить его, а затем вызвать метод импорта, который вы используете, чтобы импортировать его в библиотеку мультимедиа.

Например, библиотека мультимедиа под названием «Изображения сайта» для сайта«MySite» будет иметь папку на диске в /MySite/media/Site Images/.Перетащите туда свой файл (вы можете использовать подпапки, если хотите).На данный момент файл находится «в» медиа-библиотеке, но он еще не был импортирован, поэтому вы не сможете его использовать.Вы можете убедиться в этом, просмотрев Media Library в интерфейсе CMS Desk.Однако этот файл еще не был импортирован в библиотеку мультимедиа, и вы должны увидеть восклицательный знак внутри желтого треугольника рядом с вашим новым файлом.

Так что после того, как вы получите файл в нужном месте, вы можете использоватьэта информация о файле для заполнения объекта MediaFileInfo и импорта файла.

1 голос
/ 19 декабря 2011

Не могли бы вы адаптировать этот код и передать отсюда байты PDF?

программное добавление файлов в библиотеку мультимедиа Kentico

0 голосов
/ 09 сентября 2011

К сожалению, класс MemoryStream не содержит этой информации, поэтому вы не можете получить ее непосредственно из этого объекта.В любом случае, если вы хотите указать свойство FileSize , вы можете использовать свойство ms.Length в качестве обходного пути.В принципе, это конкретное свойство не важно, поэтому оно может быть даже фиктивным числом.Что касается расширения - вы говорите, что получаете сообщение об ошибке, говоря, что это свойство имеет значение null, хотя вы установили его как «fileInfo.FileExtension =" .pdf ";«?Вы можете уточнить?Также обратите внимание, что вам нужно установить некоторые другие свойства, FileSiteID, FileCreatedWhen, FileGUID и FilePath (путь внутри данной библиотеки мультимедиа).Если у вас есть полный исходный код API Kentico, вы можете получить вдохновение от конструктора MediaFileInfo объекта в \ MediaLibrary \ MediaFileInfo.cs классе.

...