如何将图像添加到FiRestore数据库中的记录

2022-02-21 00:00:00 jpeg blob google-cloud-firestore java

我需要将JPEG图像添加到Firestore DB记录。我更喜欢的方式是在BLOB中,就像我在SQLite记录中使用的那样。我尝试此操作时遇到一些问题。

这是我到目前为止的最大努力:

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

解决方案

作为一般规则,除非您存储的图标非常小,否则我建议您不要执行此操作。&q;

虽然您可以在Cloud Firestore中存储原生二进制数据,但您会遇到数据库中的一些限制,具体地说,单个文档的大小不能超过1MB。(您实际上不需要对图像进行base64编码。)

相反,我会将图像本身存储在Cloud Storage for Firebase中,然后将下载URL保存在Cloud Firestore中。云存储在存储成本方面大约便宜7倍,在最大文件大小方面有更大的限制,通过抓取这些下载URL,您可以利用毕加索(Picasso)和Glide等第三方库来为您管理图像下载,同时还可以添加内存或磁盘缓存或显示占位符图形等漂亮功能。

有关详细信息,您可能需要查看";Getting Started with Firebase Storage on Android";视频。

相关文章