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 でエンコードされていることがわかっているため、BLOB ファイルを Base64 からデコードするようにコードを調整するにはどうすればよいですか?

4

1 に答える 1

1

フィールドが BLOB フィルタを使用しない限り、データはそのままデータベースに保存されます。つまり、Firebird はデータを変更しません。フィールドの定義を確認してください。SUB_TYPE 0(またはbinary) がある場合、それは「通常の」バイナリ データです。つまり、Firebird はそれにフィルタを適用しません。また、フィールドが何らかのフィルタを使用している場合でも、フィルタ コードにバグがない限り、BLOB のコンテンツを読み取るときに元のデータを取得する必要があります。

したがって、ドキュメントをDBに保存したプログラムに帰着します。ファイルを圧縮または暗号化した可能性は十分にありますが、Firebirdがどのアルゴリズムが使用されたかを理解するのに役立つ方法はありません... 1つのオプションはBLOB の内容をファイルに保存してから、*nixfileコマンドを試してみてください。使用されているファイル形式を検出できる可能性があります。

念のため、DB の破損もチェックします (Firebird のgfixコマンド ライン ツール)。

于 2013-03-27T10:16:25.323 に答える