【问题标题】:Retreive word, pdf from archived database in blob column从 blob 列中的存档数据库中检索 word、pdf
【发布时间】:2019-07-07 08:45:45
【问题描述】:

我们已终止与 Saas 工具的合同。我们收到了作为 Oracle 数据库的存档数据,其中 Blob 列中包含 word 和 pdf 文档。我们被告知 Blob 数据是 Base64 二进制文件,需要在下载到文件之前进行解码。查看 Blob 列中的数据时,它看起来像这样:

       í]pÅ™þgµ«•,­´–‘°
8„I–
c#Y’-Ù²ül‡àF»#íˆÝõήŒHRˆ@!  qsG\¹‹I ¹ÜåçQ<ª #G.<'Áªâ«
÷È«øB‘J¼÷ýÝ3»#iW–d‡×Í/}ÛÓÓÝÿß÷ßwïÎãðç½ç›ÿƒ&ÐZ*£¹J*wS€
N$LÔmŸ;‘ËåøÔz çÑÛŠ~wß÷èüë*ýDÇêÍ÷,ßÐ@TCÃÃ÷ÔßS?ÑBˆ*ý
Ô|Ñã7I4ÔLÎã¦\®ö¤ÇÝ+>U?

同hexdump:

00000000 1f 8b 08 00 00 00 00 00 00 00 ed 5d 0b 70 1c c5 |...........].p..|
00000010 99 fe 67 b5 ab 95 2c ad b4 96 91 b0 8d 0d 03 38 |..g...,........8|
00000020 84 18 49 96 0d 06 63 07 23 59 92 2d d9 b2 fc 90 |..I...c.#Y.-....|
00000030 6c 87 e0 03 46 bb 23 ed 88 dd 9d f5 ce ae 8c 48 |l...F.#........H|
00000040 52 88 40 02 21 09 71 12 73 47 5c b9 8b 49 20 b9 |R.@.!.q.sG\..I .|
00000050 dc e5 12 e7 51 3c aa 20 90 23 47 2e 3c 12 27 c1 |....Q<. .#G.<.'.|

已尝试在 PL/SQl、Java、Linux 中使用 Base64 库进行解码,但无法正常工作。

Java:

byte[] decoded = Base64.decodeBase64(Files.readAllBytes(Paths.get(fileName)));
byte[] decodedBytes = Base64.decodeBase64(input_file);

PL/SQL:

utl_file.put(l_output, utl_raw.cast_to_varchar2(vblob));

utl_file.putl_output, utl_raw.cast_to_varchar2(utl_encode.base64_decode(vblob)));

raw_decoded := utl_encode.base64_decode(vblob);
utl_file.put_raw(l_output, utl_raw.cast_to_varchar2(raw_decoded));

您能否告知这是 Base64 数据还是它采用什么格式?预期结果是在 MS Word、PDF 文档中呈现 blob。

【问题讨论】:

  • 不,这根本不像 Base64。在 Linux 上尝试base64 somefile 以查看真实示例。您是否尝试过使用例如识别数据? file blob_example_file 在 Linux 上?
  • 是的,也尝试过 linux 库(Base64 命令)。过去曾致力于将 Base64 图像转换为 jpg。有点熟悉 Base64 流。发布以确认这不是 Base64 并查看是否有人知道这是什么格式。感谢您的回复和建议。
  • 顺便说一句:添加示例的 hexdump 可能会有所帮助。我很确定您现在拥有的字符串的复制和粘贴不会是透明的。选项将是 od (coreutils) 或 hexdump (util-linux) 工具。
  • 这看起来可能是 Word 的二进制专有文件格式 - 如果您在文本编辑器中打开 .doc ( *not docx) 文件会看到什么。如果是这种情况,理论上将内容写入文本文件,然后使用扩展名.doc 保存它是可行的。但这并不确定,只是我会尝试的事情......
  • @Stefan hexdump 正在生产(前几行) 00000000 1f 8b 08 00 00 00 00 00 00 00 ed 5d 0b 70 1c c5 |...........].p ..| 00000010 99 fe 67 b5 ab 95 2c ad b4 96 91 b0 8d 0d 03 38 |..g....,........8| 00000020 84 18 49 96 0d 06 63 07 23 59 92 2d d9 b2 fc 90 |..I....c.#Y.-....| 00000030 6c 87 e0 03 46 bb 23 ed 88 dd 9d f5 ce ae 8c 48 |l...F.#........H| 00000040 52 88 40 02 21 09 71 12 73 47 5c b9 8b 49 20 b9 |R.@.!.q.sG\..I.| 00000050 直流 e5 12 e7 51 3c aa 20 90 23 47 2e 3c 12 27 c1 |....Q<. .>

标签: pdf ms-word base64 blob


【解决方案1】:

我已经解决了这个问题。原来 blob 列中的数据是直接文档(word 或 pdf),但已被压缩。所以查询blob列的时候用utl_compress解压然后直接utl_file输出到物理文件。

从 TABLE 中选择 UTL_COMPRESS.LZ_UNCOMPRESS(BLOB_COLUMN) 到 v_blob 中,其中 ID =

感谢所有回复的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2012-09-24
    • 2012-06-10
    相关资源
    最近更新 更多