Kentico - Passe fichier MemoryStream API MediaFileInfo
-
28-10-2019 - |
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?
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.