質問

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

NULL 可能な列が原因でデータベース エラーが発生し続けます。ファイルサイズ、ファイル拡張子など私は MemoryStream を使用しているため、そのすべての情報を提供する方法が見つかりません。

MediaFileInfo API を MemoryStream ファイルと誤って組み合わせて使用​​しているのでしょうか?

役に立ちましたか?

解決

実際のところ、RadekM が言ったことをする必要はないと思います。ファイルをディスクにストリーミングして保存し、使用しているインポート メソッドを呼び出してメディア ライブラリにインポートするだけです。

たとえば、サイト「MySite」の「Site Images」というメディア ライブラリには、ディスク上の次のフォルダがあります。 /MySite/media/Site Images/. 。そこにファイルをドロップします (必要に応じてサブフォルダーを使用できます)。この時点では、ファイルはメディア ライブラリに「存在」していますが、まだインポートされていないため、使用することはできません。CMS Desk インターフェイスでメディア ライブラリを表示すると、これが真実であることがわかります。ただし、このファイルはまだメディア ライブラリにインポートされていないため、新しいファイルの横に黄色の三角形の内側に感嘆符が表示されます。

したがって、ファイルを正しい場所に取得したら、そのファイル情報を使用して MediaFileInfo オブジェクトを設定し、ファイルをインポートできます。

他のヒント

このコードを修正して、ここから PDF のバイトを渡していただけますか?

プログラムによる Kentico メディア ライブラリへのファイルの追加

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top