web-dev-qa-db-ja.com

firestoreデータベースは、記録する画像を追加します

Firestore DBレコードにJPEG画像を追加する必要があります。私の好きな方法は、Sqliteレコードで使用したBlobです。私はこれを試す際にいくつかの問題に遭遇しました。以下は、これまでの私の最善の試みです。

public Blob getImage() {
    Uri uri = Uri.fromFile(new 
File(mCurrentPhotoPath));
    File f1 = new File(mCurrentPhotoPath);
    URL myURL = null;
    try {

        myURL = f1.toURI().toURL();
    } catch (MalformedURLException e) {
        e.printStackTrace();
    }

    Bitmap bitmap = null;

    BitmapFactory.Options options = new 
BitmapFactory.Options();
    options.inPreferredConfig = 
Bitmap.Config.ARGB_8888;
    try {
        if (myURL != null) {
            bitmap = 
BitmapFactory.decodeStream( 
myURL.openConnection().getInputStream());
            String wBlob = 
encodeToBase64(bitmap,
 Bitmap.CompressFormat.JPEG, 100);
       blob = fromBase64String(wBlob);           
}


    } catch (Java.io.IOException e) {
        e.printStackTrace();

    }
    return blob;
}

私の問題は
blob = fromBase64String(wBlob);

レコードを設定するクラスにblobを渡すことにも問題があります。 intent.putExtra( "blobImage"、blob);どんな助けにも感謝します。

5
rosey

原則として、かなり小さいアイコンを保存しない限り、「これを行わないでください」と言います。

Cloud Firestoreにネイティブバイナリデータを保存できますが(実際に画像をbase64エンコードする必要はありません)、データベースのいくつかの制限に直面します-特に、単一のドキュメントではできません1MBを超えるサイズにする。

代わりに、画像自体をCloud Storage for Firebaseに保存し、ダウンロードURLをCloud Firestoreに保持します。 Cloud Storageは、ストレージコストの点で約7倍安く、最大ファイルサイズの点ではるかに大きな制限があり、これらのダウンロードURLを取得することで、画像のダウンロードを管理できるPicassoやGlideなどのサードパーティライブラリを利用できます。また、メモリやディスクのキャッシュ、プレースホルダグラフィックスの表示などの優れた機能も追加します。

詳細については、 このビデオ を参照してください。

23
Todd Kerpelman