我有一个非常古老的.sql备份的vbulletin网站,我在8年前跑了。我试图查看存储在数据库中的文件附件。下面的脚本全部提取它们,并通过十六进制转储并根据JPEG wiki page检查SOI(图像开始)和EOI(图像结束)字节(分别为FFD8和FFD9)验证为JPEG。
但是当我尝试用evince打开它们时,我收到此消息“解释JPEG图像文件时出错(JPEG数据流不包含图像)”
这可能会发生什么?
一些背景信息:
我的Python 3.1脚本:
#!/usr/bin/env python3.1
import re
trim_l = re.compile(b"""^INSERT INTO attachment VALUES\('\d+', '\d+', '\d+', '(.+)""")
trim_r = re.compile(b"""(.+)', '\d+', '\d+'\);$""")
extractor = re.compile(b"""^(.*(?:\.jpe?g|\.gif|\.bmp))', '(.+)$""")
with open('attachments.sql', 'rb') as fh:
for line in fh:
data = trim_l.findall(line)[0]
data = trim_r.findall(data)[0]
data = extractor.findall(data)
if data:
name, data = data[0]
try:
filename = 'files/%s' % str(name, 'UTF-8')
ah = open(filename, 'wb')
ah.write(data)
except UnicodeDecodeError:
continue
finally:
ah.close()
fh.close()
更新 JPEG维基页面说FF字节是节标记,下一个字节表示节类型。我看到一些未在wiki页面中列出的内容(具体来说,我看到很多5C字节,所以FF5C)。但该列表是“常用标记”,所以我试图找到一个更完整的列表。这里的任何指导也将不胜感激。
答案 0 :(得分:1)
使用示例SQL语句更新您的问题,包括JPEG字符串值的几行/字节。也许数据是base64编码的,甚至是直的十六进制值。我们会进一步帮助您。
此外,通过发出:
更容易看到文件内容的类型file yourfile.jpg