データベースに写真を保存すると機能しますが、サイズが大きくなる可能性があります。オフライン機能を維持したいと考えています。ユーザーがオフラインで画像を追加すると、その画像が最終的に同期することが期待されます。
一つの解決策は、デバイスごとのレルムを持っているだろう(つまり、サーバー以外のものとの同期を避けるために、それに一意の名前を付け)単一のクラス(擬似コード)で画像アップロードキューとして使用することができること:
新しい
ObjectWithImage
を追加するとき
class Image : RealmObject {
byte[] Data
// Other properties to map this image to whatever
// object it belongs to.
}
次に、画像をあなたのオブジェクトは、だから今
class ObjectWithImage : RealmObject {
string ImageUrl
// Other properties
}
のようになります、あなたは画像レルムに対応するImage
オブジェクトを追加します。その後、サーバー上で、イメージRealm(少なくともプロフェッショナル版が必要です)の変更をリッスンし、新しいImage
が同期化されたら、AWS S3/Azure BLOB /他のホストにデータをアップロードし、対応するObjectWithImage
' s ImageUrl
を入力し、処理済みのImage
オブジェクトを削除します。次に、画像キャッシングライブラリを使用することができます(例: SDWebImage URLから画像をダウンロードしてローカルに保存すると、次回検索が高速になります。
このソリューションの利点は次のとおりです。
- 共有領域は、このように速く同期を行うストレージと帯域幅の要件の両方を減らすことは、urlのが唯一含まれています。
- アプリケーションはオフラインで動作し、接続が復元されると、最終的に共有レルムとイメージレルムの両方を同期します。
- レルムのイメージは他のデバイスと同期されないため、不要なトラフィックは発生しません。
そして、いずれかの解決策が行くように、いくつかの欠点があります。
- それは、サーバ上のオブジェクトを修正する必要とするそれは、開発版では動作しません。
- 2つの異なる領域で2つのトランザクションを(できれば)アトミックな方法でコミットしたいので、より高度なトランザクションエラー処理が必要な場合があります。