ファイル機能(SS::File)

シラサギのページ添付ファイルに利用されているファイル機能について解説します。

SS::File

ページに添付ファイルをアップロードすると、アップロードしたファイルのパス、サイズ等の属性をデータベースに格納し、 対応する物理ファイルとの紐づけを保持します。これらは以下の標準クラスにより実装されています。

要素 標準クラス 抽象モジュール mongo collection
ファイル SS::File SS::Model::File ss_files

次のような特徴があります。

なお、アップローダー機能は公開側ディレクトリへのファイル直接アップロードとなる為、本稿とは設計が異なります。

ファイルの閲覧(URL)

CMSやGWS、WEBメールを含むシラサギの画面より SS::File を閲覧する為、次の形式のURLが提供されています。

補足として、古いシラサギでは以下の形式になります。

ファイルの閲覧(Fs::FilesController)

ファイル閲覧に対応するコントローラは以下になります。

コントローラーを介しファイルを動的に応答することで、 権限による閲覧の可否、画像リサイズといった機能を有します。

次のような動作を行います。

※このURL、コントローラーの他にも、個別の機能として SS::File を応答する箇所は存在します。

ページ側の実装

ページに SS::File を紐づけて保存する為のモジュールを紹介します。

ファイル書き出し

ファイル書き出しのコールバックが実装されているページについては、ページ公開保存時にファイルが公開ディレクトリに書き出されます。

次のような動作を行います。

サムネイル(SS::Relation::Thumb)

ファイルクラスに以下のモジュールを include することでサムネイルが生成されるようになります。

include した際の動作について記載します。

サムネイル(URL)

SS::ThumbFile は標準クラス SS::File の派生となりますが、専用のURLを提供しています。
対応するコントローラは Fs::FilesController です。

画像リサイズ

SS::File には resizing というアクセサが定義されています。
このアクセサに [320, 240] といった幅,高さの数値の配列を入力することで、保存時に画像のリサイズされます。
リサイズ処理は ImageMagickresize_to_fit が実行されます。

model 属性

SS::File には model があり、添付元のクラスを識別するための値を保持しています。

サムネイルについては以下の値を格納しています。

他、特殊な利用方法として、CMSメンバーの閲覧判定を行う際 SS::FileMember::File のインスタンスに変更する為、model 属性を使っています。

File storage 設定

物理ファイルの保存先について2つのモードがあり、environment.ymlstorage: に設定できます。

標準的には file モードでの運用となる為、 grid_fs は機能によってサポートがされていない箇所があります。