web-dev-qa-db-fra.com

base de données firestore ajouter une image à l'enregistrement

J'ai besoin d'ajouter des images JPEG aux enregistrements de base de données Firestore. Ma façon préférée serait dans un Blob comme je l'ai utilisé dans les disques Sqlite. J'ai rencontré des problèmes en essayant cela. Ce qui suit est mon meilleur essai jusqu'à présent:

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;
}

Mon problème est dans le
blob = fromBase64String (wBlob);

J'ai également un problème avec le passage d'un blob à la classe qui établit le record. intent.putExtra ("blobImage", blob); J'apprécie toute aide.

5
rosey

En règle générale, à moins que vous ne stockiez des icônes assez petites, je dirais: "Ne faites pas cela".

Bien que vous puissiez stocker des données binaires natives dans Cloud Firestore (vous n'avez pas vraiment besoin de coder en base64 votre image), vous allez vous heurter à certaines limites de la base de données - en particulier, un seul document ne peut pas avoir une taille supérieure à 1 Mo.

Au lieu de cela, je stockais les images elles-mêmes dans Cloud Storage for Firebase, puis je conservais simplement les URL de téléchargement dans Cloud Firestore. Cloud Storage est environ 7 fois moins cher en termes de coûts de stockage, a des limites beaucoup plus grandes en termes de taille de fichier maximale, et en saisissant ces URL de téléchargement, vous pouvez profiter de bibliothèques tierces comme Picasso et Glide qui peuvent gérer le téléchargement d'images pour vous, tout en ajoutant des fonctionnalités astucieuses comme la mémoire ou la mise en cache du disque ou en affichant des graphiques d'espace réservé.

Vous voudrez peut-être consulter cette vidéo pour plus d'informations.

23
Todd Kerpelman