Question

J'ai créé un fichier PDF iTextSharp qui est créé à un MemoryStream. Mais maintenant je dois passer ce fichier à la bibliothèque multimédia Kentico.

Je vous serais reconnaissant si quelqu'un pouvait montrer ma façon de faire. Le code est actuellement je:

//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);

Je continue à obtenir des erreurs de base de données en raison de colonnes nullables par exemple FileSize, FileExtension, etc. Depuis que je me sers d'un MemoryStream je ne peux pas trouver un moyen de fournir toutes les informations.

Suis-je en utilisant l'API MediaFileInfo de manière incorrecte en liaison avec un fichier MemoryStream?

Était-ce utile?

La solution

En fait, je ne pense pas que vous devez faire tout ce que dit RadekM. Vous pouvez simplement diffuser le fichier sur le disque pour l'enregistrer, puis appeler la méthode d'importation que vous utilisez pour importer dans la bibliothèque multimédia.

Par exemple, une bibliothèque multimédia intitulée « Images du site » pour le site « MySite » aura un dossier sur le disque à /MySite/media/Site Images/. Déposez votre fichier dans là (si vous voulez, vous pouvez utiliser sous-dossiers). A ce stade, le fichier est « dans » la bibliothèque de médias, mais il n'a pas encore été importé, de sorte que vous ne pourrez pas l'utiliser. Vous pouvez voir cela est vrai en consultant la bibliothèque multimédia dans l'interface de bureau CMS. Cependant, ce fichier n'a pas encore été importé dans la bibliothèque des médias et vous devriez voir un point d'exclamation dans un triangle jaune à côté de votre nouveau fichier.

Une fois que vous obtenez le fichier au bon endroit, vous pouvez utiliser ces informations de fichier pour remplir l'objet MediaFileInfo et importer le fichier.

Autres conseils

Pouvez-vous adapter ce code et passer les octets du PDF à partir d'ici?

ajouter des fichiers à la programmation Media Library Kentico

Malheureusement, la classe MemoryStream ne contient pas ces informations, de sorte que vous ne pouvez pas les gagner de cet objet directement. Quoi qu'il en soit, si vous voulez fournir FileSize propriété, vous pouvez utiliser ms.Length propriété comme une solution de contournement. En gros, cette propriété particulière est pas important, donc il peut être même un nombre de mannequin. En ce qui concerne l'extension - vous dites que vous recevez erreur indiquant cette propriété est null, bien que vous définissez comme « fileInfo.FileExtension = « .pdf »; « ? Pouvez-vous clarifier? Veuillez également noter que vous devez définir d'autres propriétés, FileSiteID, FileCreatedWhen, FileGUID et CheminFichier (chemin intérieur bibliothèque multimédia donné). Si vous avez le code source complet de l'API Kentico, vous pouvez obtenir une inspiration du constructeur de MediaFileInfo objet dans \ MediaLibrary \ MediaFileInfo.cs classe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top