Skip to content

添付ファイルのサムネイル付き一覧(ライブラリ表示) ​

第1版作成 最終更新 (日本時間)
確認バージョン1.5.8.1

添付ファイル項目は「ファイル名 (サイズ)」を縦に並べるだけで、画像でもサムネイルは出ません。このページは、画像はサムネイル、それ以外は拡張子に応じたアイコンを並べる「ライブラリ表示」を足す本体改修の設計メモです。本体の標準機能ではありません。

画像をクリックしてモーダルで開くだけなら、スクリプトで実現できます(画像をプレビューモーダルで表示する)。

前提にした現行実装 ​

添付ファイルの HTML ​

1 件ごとに、虫眼鏡アイコン(/binaries/{guid}/show を別タブで開く)、ファイル名のリンク(ダウンロード)、削除ボタンを出します(HtmlControls.cs)。

サムネイルがあるのは説明項目の画像だけ ​

Binaries テーブルには Thumbnail・Icon 列がありますが、使い方は種類で違います。

BinaryTypeサムネイル
SiteImageRegular・Thumbnail・Icon の 3 サイズを作る
TenantImageLogo だけ
Images・TenantManagementImages(説明項目などに貼った画像)項目の ThumbnailLimitSize、なければ BinaryStorage.json の ThumbnailLimitSize が 0 より大きいとき、そのサイズで作る(BinaryUtilities.cs)
Attachments(添付ファイル項目)作らない

/binaries/{guid}/show はファイルを FileContentResults.Download で取り出します。?thumbnail=1 を付けるとサムネイルを返すのは BinaryType が Images のときだけです(FileContentResults.cs、L295-L310)。

アイコンのフォント ​

Google の Material Symbols(Outlined・Rounded・Sharp)が本体に入っています(Implem.PleasanterFrontend/wwwroot/src/plugins/material-symbols/)。<span class="material-symbols-sharp">attach_file</span> のように、アイコン名の文字列で表示します。

設計 ​

サムネイルはアップロード時に作る ​

アップロード時に作る表示するときに作る
表示の速さ速い初回は遅い
アップロード画像の縮小の分だけ遅くなる変わらない
容量サムネイルの分だけ増える(小さい PNG)作り方次第
既存の仕組みThumbnail 列と ImageData の縮小をそのまま使えるキャッシュの仕組みを新しく作る

アップロード時に作ります。説明項目の画像(UploadImage)と同じ形です。

図を読み込み中…

  • 画像かどうかは MIME タイプで判定し、ImageSharp で読めなければサムネイルを作らずに元ファイルだけ保存します。アップロード自体は失敗させません。
  • サムネイルは PNG に作り直すので、元の画像のメタデータは入りません。
  • 既存の添付ファイルにはサムネイルがありません。後で一括で作るより、サムネイルが無いものはアイコンで表示するのが簡単です。

サムネイルの配信 ​

FileContentResults.Download の switch で、Attachments のときも thumbnail のクエリを見て Bytes(..., thumbnail: true) を呼ぶようにします。Thumbnail 列が空なら元のファイルを返す動きは Images と同じです。

URL返すもの
/binaries/{guid}/show元のファイル
/binaries/{guid}/show?thumbnail=1サムネイル(無ければ元のファイル)
/binaries/{guid}/downloadダウンロード

画像以外はアイコンで表す ​

サムネイルが無いときは、拡張子から Material Symbols のアイコンを選びます。

拡張子アイコン名
.pdfpicture_as_pdf
.doc・.docxdescription
.xls・.xlsxtable_chart
.ppt・.pptxslideshow
.txt・.csv・.logtext_snippet
.zip・.rar・.7z・.gz・.tarfolder_zip
.mp4・.avi・.mov・.webm・.mkvmovie
.mp3・.wav・.ogg・.flac・.aacaudio_file
.html・.css・.js・.tscode
.json・.xml・.yaml・.ymldata_object
その他attach_file

表示 ​

html
<div class="attachment-library">
    <div class="attachment-library-item">
        <a class="attachment-thumbnail" href="/binaries/{guid}/show" target="_blank">
            <img src="/binaries/{guid}/show?thumbnail=1" alt="{ファイル名}" loading="lazy">
            <!-- サムネイルが無い場合 -->
            <!-- <span class="material-symbols-sharp">picture_as_pdf</span> -->
        </a>
        <a class="file-name" href="/binaries/{guid}/download">{ファイル名}</a>
        <span class="file-size">({サイズ})</span>
    </div>
</div>
css
.attachment-library {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
    gap: 8px;
}
.attachment-thumbnail {
    width: 80px;
    height: 80px;
    display: flex;
    align-items: center;
    justify-content: center;
}
.attachment-thumbnail img {
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
}
.attachment-thumbnail .material-symbols-sharp {
    font-size: 48px;
}

従来のリスト表示と切り替えられるように、項目の設定で表示方法を選べるようにします。

改修するファイル ​

ファイル内容
Libraries/Images/ImageData.cs添付ファイル用のサムネイル・アイコンの作成
Models/Binaries/BinaryUtilities.cs・BinaryModel.cs添付ファイルの保存時にサムネイルを入れる
Libraries/Responses/FileContentResults.csAttachments でも ?thumbnail を返す
Libraries/HtmlParts/HtmlControls.csライブラリ表示の HTML と、拡張子からのアイコンの選択
Libraries/Settings/Column.cs表示方法の設定
wwwroot/src/scripts/generals/attachmentsevents.js・スタイル表示の切り替えとスタイル

関連ページ ​

変更履歴

第1版履歴タブと復元・数値項目の通貨記号・画像プレビューモーダルの解説と、編集画面まわりの改修・設計メモを追加