【问题标题】:How to add an image to a record in a Firestore database如何将图像添加到 Firestore 数据库中的记录
【发布时间】:2018-03-13 21:11:38
【问题描述】:

我需要将 JPEG 图像添加到 Firestore 数据库记录。我首选的方式是在 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 );

【问题讨论】:

    标签: java blob jpeg google-cloud-firestore


    【解决方案1】:

    作为一般规则,除非您存储相当小的图标,否则我会说“不要这样做”。

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

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

    您可能想查看“Getting Started with Firebase Storage on Android”视频了解更多信息。

    【讨论】:

    • 嗨,托德。这是一个 Cloud Firestore 问题,而不是 RTDB。你的答案是否仍然支持这一点?我将 base64 编码文件存储在 Cloud Firestore 中,用于我的一个应用程序,因为它允许比 Cloud Storage for Firebase 更好的安全规则控制。
    • 抱歉——刚刚更新了我对 Cloud Firestore 的回答。 (长话短说,我仍然建议将 Cloud Storage 用于图像。这不是价格问题,而是“您可能会遇到最大文档大小”的问题。)
    • 谢谢,托德。对于我正在使用的数据,永远不会超过 1Mb 的限制。我希望有一天,云存储安全规则能够查询存储在 RTDB / Cloud Firestore 中的值。
    • 感谢您的好建议。我目前将图像存储在 Firebase 存储中,并将路径存储在文档中。它工作得很好。我想如果我可以离开博客,它会更紧凑,但我的直觉正是你所建议的。
    猜你喜欢
    • 2022-01-25
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 2021-02-20
    相关资源
    最近更新 更多