Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python重构sqlserver中上传的文件_Python_Sql Server - Fatal编程技术网

用python重构sqlserver中上传的文件

用python重构sqlserver中上传的文件,python,sql-server,Python,Sql Server,我正在使用与此类似的SQL Server数据库表 USER_ID varchar(50), FILE_NAME ntext, FILE_CONTENT ntext 样本数据: USER_ID: 1 FILE_NAME: (AttachedFiles:1)=file1.pdf FILE_CONTENT: (AttachedFiles:1)=H4sIAAAAAAAAAOy8VXQcy7Ku…. 表示正则表达式我已通过删除“(AttachedFiles:1)=”部分成功隔离了FIL

我正在使用与此类似的SQL Server数据库表

USER_ID varchar(50), FILE_NAME ntext, FILE_CONTENT ntext
样本数据:

USER_ID:      1
FILE_NAME:    (AttachedFiles:1)=file1.pdf
FILE_CONTENT: (AttachedFiles:1)=H4sIAAAAAAAAAOy8VXQcy7Ku….
表示正则表达式我已通过删除“(AttachedFiles:1)=”部分成功隔离了FILE_内容字段的“内容”,该部分由类似以下内容的字符串生成:

content_str = "H4sIAAAAAAAAAOy8VXQcy7Ku22JmZmZmspiZGS2WLGa0xc…"
我的计划是使用这个字符串重新构建文件,从数据库下载它。在我的调查过程中,我发现并复制了如下代码:

content_str = 'H4sIAAAAAAAAAO19B0AUR/v33...'
with open(os.path.expanduser('test.pdf'), 'wb') as f:
    f.write(base64.decodestring(content_str))
content_str = 'H4sIAAAAAAAAAO19B0AUR/v33...'
encoded = content_str.encode('ascii')
with open(os.path.expanduser('test.pdf'), 'wb') as f:
    f.write(base64.decodestring(encoded))
…获取TypeError:应为类似object的字节,而不是str

进一步调查后,我发现并继续这样做:

content_str = 'H4sIAAAAAAAAAO19B0AUR/v33...'
with open(os.path.expanduser('test.pdf'), 'wb') as f:
    f.write(base64.decodestring(content_str))
content_str = 'H4sIAAAAAAAAAO19B0AUR/v33...'
encoded = content_str.encode('ascii')
with open(os.path.expanduser('test.pdf'), 'wb') as f:
    f.write(base64.decodestring(encoded))
…从而成功创建了PDF。但是,当试图打开它时,我得到一个错误,说该文件已损坏


我恳请你就如何进行提出任何建议。如果有必要,我甚至愿意重新思考我提出的流程。非常感谢

文件内容的值是base64编码的。这意味着它是一个由64个代表原始字节的可能字符组成的字符串。您只需对字符串进行base64解码,并将结果字节直接写入文件

import base64

content_str = "H4sIAAAAAAAAAOy8VXQcy7Ku22JmZmZmspiZGS2WLGa0xc=="

with open(os.path.expanduser('test.pdf'), 'wb') as fp:
    fp.write(base64.b64decode(content_str))
内容字符串开头的base64序列
“H4sI”
转换为字节
0x1f
0x8b
0x08
。这些字节通常不在PDF文件的开头,但表示gzip压缩数据流。PDF阅读器可能不理解这一点

我不确定gzip压缩是否是PDF文件格式的有效部分,但它是web通信的有效部分,因此可能文件流是为传输/下载而压缩的,在写入数据库之前没有解压缩

如果您的PDF阅读器不按原样接受数据,请在将其保存到文件之前对其进行解压缩:

import gzip

# ...

with open(os.path.expanduser('test.pdf'), 'wb') as fp:
    fp.write(gzip.decompress(base64.b64decode(content_str)))

谢谢托马拉克!我尝试了你的建议,但现在我得到了一个“EOFError:压缩文件在到达流结束标记之前结束”进一步调查时,我找到了一些线程,表明错误是由于文件损坏造成的。任何进一步的建议都将不胜感激。首先,尝试将流写入文件,而不通过
gzip.decompress()
。然后试着用你的PDF阅读器打开生成的文件,只是为了检查它是否知道该做什么。如果有问题,试着用7zip(可以处理各种压缩格式)打开生成的文件,看看里面是否有任何内容。也许
gzip.decompress()
还不是正确的工具,这是我的一个有根据的猜测。我创建了一个没有gzip.decompress()的pdf,但未能在阅读器中打开它。我继续将pdf的扩展名更改为.zip、.rar、.7z,但未能使用7zip进行解压缩。然而,当解压缩.gzip时,我得到的错误是“意外的数据结束”。再次感谢!你能把你现在有的文件上传到某个地方吗?我可以试着看一看,也许我能想出一些办法。不过没有承诺。非常感谢你,托玛拉克!现在在我的github上: