Kentico - передать файл MemoryStream в API MediaFileInfo

Я создал 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 ответа

Решение

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

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

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

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

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

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

Другие вопросы по тегам