2

我正在尝试恢复存储在 Firebird 数据库中的 BLOB 字段,我拥有的唯一信息是 BLOB 字段的内容是一个文档。

我尝试使用 IBManager 右键单击​​单元格并单击“将 BLOB 保存到文件”,但保存的文件不可读(就像它被加密一样)。我尝试用 Microsoft Word、记事本、adobe 等打开它,但没有成功。我还尝试用 WinRAR 打开它(我认为它可能在存储到数据库之前已经被压缩)但仍然没有。

有没有办法查明 BLOB 文件是否以及如何被压缩,以及如何恢复它?

提前致谢!

更新:

我已将 firebird 数据库转换为 SQL,并使用以下代码提取未编码的 BLOB 文档:

         conn.Open();
        dr = comm.ExecuteReader();

        while (dr.Read())
        {
            byte[] document_byte = null;

            if (dr[1] != System.DBNull.Value)
            {
                document_byte = (byte[])dr[1];
            }

            string subPath = "C:\\Documents\\" + dr[0] + "\\";
            System.IO.Directory.CreateDirectory(subPath);

            if (document_byte != null)
            {
                System.IO.File.WriteAllBytes(subPath + "Document", document_byte);
            }

        }

既然我知道是 Base64 编码的,如何调整我的代码以从 Base64 解码 BLOB 文件?

4

1 回答 1

1

除非该字段使用 BLOB 过滤器,否则数据将按原样存储到数据库中,即 Firebird 不会以任何方式更改它。检查字段的定义,如果它确实有SUB_TYPE 0(或binary)那么它是“普通”二进制数据,即 Firebird 不对其应用任何过滤器。即使该字段使用了一些过滤器,除非过滤器代码中存在错误,否则您应该在读取 BLOB 的内容时取回原始数据。

因此,归结为将文档存储到数据库中的程序,它很可能压缩或加密了文件,但是 Firebird 无法帮助您弄清楚使用了什么算法......一种选择是将 BLOB 的内容保存到文件中,然后尝试 *nixfile命令,也许它能够检测到使用的文件格式。

我还会检查数据库是否损坏,只是为了区分大小写(Firebird 的gfix命令行工具)。

于 2013-03-27T10:16:25.323 回答