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 などの null 許容列が原因でデータベース エラーが発生し続けます。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 に答える
0

残念ながら、MemoryStream クラスにはこれらの情報が含まれていないため、このオブジェクトから直接取得することはできません。とにかく、 FileSizeプロパティを提供したい場合は、 ms.Lengthプロパティを回避策として使用できます。基本的に、この特定のプロパティは重要ではないため、ダミーの数値でさえあります。拡張子については、「fileInfo.FileExtension = ".pdf";」のように設定しているにもかかわらず、このプロパティが null であるというエラーが表示されるということですか? 明確にできますか?また、 FileSiteID、FileCreatedWhen、FileGUID、およびFilePath (特定のメディア ライブラリ内のパス)など、他のいくつかのプロパティを設定する必要があることに注意してください。Kentico API の完全なソース コードがある場合は、コンストラクターからインスピレーションを得ることができます。\MediaLibrary\MediaFileInfo.csクラスのMediaFileInfoオブジェクト。

于 2011-09-09T08:58:09.543 に答える