Firebase 存储 getMetadata() 问题

2024-03-08

我一直在尝试从 Firebase Storage 获取图像文件的元数据 (md5hash),并检查它是否与用户手机上图像文件的 md5hash 不相等。问题是,即使哈希值相同,我得到的结果也是不同的。

这是我试图获取元数据并进行比较的代码:

    for(int i = 0; i<5; i++) {
    StorageReference forestRef = storageRef.child("profile_images/img_" + (i + 1) + ".jpg");
    final int finalI = i;

    forestRef.getMetadata().addOnSuccessListener(new OnSuccessListener<StorageMetadata>() {
        @Override
        public void onSuccess(StorageMetadata storageMetadata) {
            if (!getMD5(getFilesDir() + "/Images/img_" + finalI + ".jpg").equals(storageMetadata.getMd5Hash())) {
                System.out.println("not equal");
                //if image files differ then download them
                System.out.println(storageMetadata.getMd5Hash());
                System.out.println(getMD5(getFilesDir() + "/Images/img_" + finalI + ".jpg"));
                StorageReference islandRef = storageRef.child("profile_images/img_" + (finalI + 1) + ".jpg");
                final long ONE_MEGABYTE = 1024 * 1024;
                islandRef.getBytes(ONE_MEGABYTE).addOnSuccessListener(new OnSuccessListener<byte[]>() {
                    @Override
                    public void onSuccess(byte[] bytes) {
                       //download files here                           
                    }
                }).addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception exception) {
                        // Handle any errors
                    }
                });
            }
        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception exception) {
            // Uh-oh, an error occurred!
        }
    });
}

这是 getMD5 方法:

    private String getMD5(String filePath)
{
    String base64Digest = "";
    try
    {
        InputStream input   = new FileInputStream(filePath);
        byte[]        buffer  = new byte[1024];
        MessageDigest md5Hash = MessageDigest.getInstance("MD5");
        int           numRead = 0;
        while (numRead != -1)
        {
            numRead = input.read(buffer);
            if (numRead > 0)
            {
                md5Hash.update(buffer, 0, numRead);
            }
        }
        input.close();
        byte [] md5Bytes = md5Hash.digest();
        base64Digest = Base64.encodeToString(md5Bytes, Base64.DEFAULT);

       /*for (byte md5Byte : md5Bytes) {
            returnVal += Integer.toString((md5Byte & 0xff) + 0x100, 16).substring(1);
        }*/
    }
    catch(Throwable t) {t.printStackTrace();}
    return base64Digest;

我得到这个输出:

I/System.out: not equal
I/System.out: zy1sZIW0XO6kH01g9LgFfw==
I/System.out: zy1sZIW0XO6kH01g9LgFfw==
I/System.out: not equal
I/System.out: wi2/XGYDD4ncHaNSRKct+A==
I/System.out: wi2/XGYDD4ncHaNSRKct+A==
I/System.out: not equal
I/System.out: DBmKPXhzYQcqGb/twjihEg==
I/System.out: DBmKPXhzYQcqGb/twjihEg==
I/System.out: not equal
I/System.out: beq6gp3s8cQ9Ky9Gn7/KoA==
I/System.out: beq6gp3s8cQ9Ky9Gn7/KoA==
I/System.out: not equal
I/System.out: tcuOskaSmP5HcaqCAszAuA==
I/System.out: tcuOskaSmP5HcaqCAszAuA==

尝试在 if 中使用此条件:

 if (getMD5(getFilesDir() + "/Images/img_" + finalI + ".jpg").trim().compareTo(storageMetadata.getMd5Hash().trim()) != 0) {
    //[...]
 }

代替! equals

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase 存储 getMetadata() 问题 的相关文章

随机推荐

  • Python 打字:TypedDict 是否允许附加/额外的键?

    Does typing TypedDict允许额外的钥匙吗 如果某个值具有 TypedDict 定义中不存在的键 该值是否会通过类型检查器 这取决于 PEP 589 规范TypedDict https peps python org pep
  • 文件支持的内存映射的 CPU 缓存行为/策略?

    有谁知道哪种类型的CPU缓存行为或策略 例如不可缓存的写组合 被分配给内存映射文件支持现代 x86 系统上的区域 有什么方法可以检测是哪种情况 并可能覆盖默认行为吗 Windows 和 Linux 是人们感兴趣的主要操作系统 编者注 这个问
  • 将 Java 对象转换为 Json,反之亦然?

    我知道 JSON 对象只不过是String 我的问题是我有一个对象映射 我想将其转换为 Json 格式 例子 Java Class gt Class Person private String name private String pas
  • “覆盖”子类中共享成员的方法

    目前我正在尝试在 vb net 中创建一种模型 可用于创建 获取数据库条目 我创建了一个带有共享函数的主类模型来获取数据集 例如模型 find 现在我想创建继承主模型类的类 例如为用户提供单独的一个 UserModel find gt SE
  • 如何停止 js 插件在页面加载时运行。我只想修复 Ajax 请求

    我在用着jquery 节奏插件 https github com HubSpot pace使用进度条主题 一切正常 但我想仅在 ajax 请求时修复此运行 经过大量搜索后 我决定在那里发帖 希望有人能提供解决方案 目前它在 Ajax 和页面
  • 如何以编程方式动态管理 iptables 规则?

    我需要查询现有规则 以及能够轻松添加和删除规则 我还没有找到任何 API 来执行此操作 我缺少什么吗 我最接近的解决方案是使用iptables save iptables xml用于查询并手动调用 iptables 命令本身来添加 删除规则
  • Google Compute Engine - 使用启动脚本启动 tmux

    我试图在启动过程中使用元数据键 startup script 启动 tmux 我正在尝试执行tmux new session d s toto在启动期间 但是当我执行tmux ls之后我没有看到任何 tmux 会话 我在这里缺少什么 您可能
  • 如何在 Keras 中故意过度拟合卷积神经网络以确保模型正常工作?

    我正在尝试诊断训练模型时导致精度低的原因 此时 我只想能够获得高训练精度 我可以稍后担心测试精度 过度拟合问题 如何调整模型以提高训练准确性 我想这样做是为了确保我在预处理步骤 洗牌 分割 标准化等 中没有犯任何错误 PARAMS drop
  • 如何相对于导致更改的点击事件对 ng-repeat 项目进行动画处理

    我正在尝试让用户从不同的项目集中选择项目 该项目应从单击的设置动画到所选项目列表中的新位置 在下面的演示中 将粉色框视为可用项目 将边框框视为所选项目列表 蓝色框 用户可以通过单击任一粉红色框来选择项目 angular module tes
  • 将 mysql 表转储到 CSV(stdout),然后将输出通过隧道传输到另一台服务器

    我正在尝试将数据库表移动到另一台服务器 复杂的是当前运行该表的机器几乎没有剩余空间 所以我正在寻找一个可以通过网络工作的解决方案 我尝试过从 src 机器上 mysqldumping 数据库并将其通过管道传输到目标 mysql 中 但我的数
  • 如何从 pytesseract 获得最佳结果?

    我正在尝试使用 OpenCV 和 Pytesseract 从图像中读取文本 但结果不佳 我有兴趣阅读文本的图像是 https www lubecreostorepratolapeligna it gb img logo png https
  • WPF 可编辑组合框验证

    我想要完成的是能够验证输入到可编辑组合框的新类别或从现有组合框的类别列表中选择一个类别 验证仅适用于 selectedItem 不适用于输入到 Text 的新文本 一旦我添加ValidateOnDataErrors True 对于 Comb
  • Visual Studio:立即窗口中的 IntelliSense 在哪里?

    看起来 立即 窗口需要一些像 IntelliSense 一样的活力 有人同意 不同意吗 这会在 VS2008 2010 中出现吗 如果您没有自动出现智能感知 请立即按 Ctrl 空格键 和乔尔一样 智能感知似乎是从封闭的窗口中进来的
  • 如何使用 scipy 和 lfilter 进行实时过滤?

    免责声明 我可能不太擅长 DSP 因此在使该代码正常工作时遇到的问题比我应有的要多 我需要在传入信号发生时对其进行过滤 我试图让这段代码工作 但到目前为止我还无法做到 参考文献scipy signal lfilter 文档 https do
  • 为什么 Msxml DocumentElement/SelectSingleNode 不返回任何内容?

    DocumentElement 属性和 SelectSingleNode 继续不返回任何内容 我已经验证 xml 加载正确 问题似乎出在 xml 解析器中 xml 没有任何命名空间 因此不需要设置 Private Function Pars
  • 使用 IntlDateFormatter 格式化 PHP 日期

    我注意到 当用 PHP 格式化日期时IntlDateFormatter http php net manual en class intldateformatter php根据语言的不同 结果可能会有很大不同 例子 formatter ne
  • 不同窗口大小的滚动总和

    我正在寻找随着窗口大小变化计算滚动总和的最快方法 我使用下面的代码 但是对于长度为 1M 的向量来说 它太慢了 Thanks set seed 1 n 10L x runif n window pmin sample 1 10 n TRUE
  • Twbs分页无法加载数据表中的新页面数据

    您好 我正在处理分页 发现当我单击第二页时无法从 twbs 插件加载数据 事实上 该方法是从 ajax 调用中调用的 但数据表数据仍然相同 有人可以告诉我该怎么做才能用服务器上的新数据填充表格 查看 thymeleaf 和 spring b
  • 更新的运行状况检查是否会导致 App Engine 部署失败?

    我们将谷歌应用程序引擎运行状况检查从旧版本更新为新版本 现在我们的部署失败了 该项目的其他内容没有改变 我们测试了默认设置 然后进行了扩展检查以防万一 这是错误 ERROR gcloud app deploy Error Response
  • Firebase 存储 getMetadata() 问题

    我一直在尝试从 Firebase Storage 获取图像文件的元数据 md5hash 并检查它是否与用户手机上图像文件的 md5hash 不相等 问题是 即使哈希值相同 我得到的结果也是不同的 这是我试图获取元数据并进行比较的代码 for