ファイルストレージとして便利なファイルストアですが、条件を付けて検索したいと思うことがあります。ファイルストアの検索ではファイル名やmimeType、ファイルサイズなどが指定可能です。
しかし、これだけでは物足りない場合もあるでしょう。そこで使ってみたいのがデータストアとの連携です。
データストアにメタデータを保存する
例えば FileData
クラスを定義します。そこにはファイルの説明やタグなどを追加します。
const fileData = new FileData; fileData .set('description', 'このファイルに関する説明') .set('tags', ['photo', 'tokyo']);
そして、ファイルストアに保存したファイル名を記録します。
fileData .set('fileName', file.fileName)
ファイルを取得する
ファイルを取得する場合には、fileDataにあるファイル名を指定するだけです。ファイルストアを検索する必要はありません。
const file = ncmb.File(fileData.fileName); await file.download();
メリット
この場合のメリットとして、ファイルストアに保存する際のファイル名をランダムな文字列にしても良いということがあげられます。ファイルストアではファイル名が一意になっており、多数のユーザがいる場合同じファイル名が付いてしまう可能性があります。その場合、間違った上書きであったり、ACLによってエラーになってしまうでしょう。ファイル名をランダムなものにできればエラーが発生することなく、ユーザ自身が指定した名前を利用できます。
またメタデータによるデータの細かな検索が実現できます。絞り込みができる分、必要なデータだけを取得対象にできるのでネットワーク帯域を最小限にしたり、アプリの動作を高速化できるというメリットがあります。
まとめ
ファイルストアをユーザにも使えるようにする場合、データストアを使って一段階分けた利用がお勧めです。ACLの管理も簡単になりますので、写真共有アプリやメッセージアプリなどを作る際には参考にしてください。