从MS SQL Server 2008提取PDF字节数据转存本地时文件损坏问题
解决从SQL Server提取PDF字节数组写入文件损坏的问题
看起来你遇到的问题大概率是文件写入方式不对或者不必要的编码/解码操作导致的,我帮你梳理下问题并给出可行的解决方案:
可能的错误原因
- 你可能用了文本模式(
"w")而不是二进制模式("wb")写入文件,导致字节流被错误转码,直接破坏了PDF的结构。 - 代码里导入了
base64但如果原始字段存储的是原生PDF字节流,没必要做base64解码,这会直接让内容错乱。
修正后的完整代码
import pyodbc import os # 建立数据库连接 cnxn = pyodbc.connect('DSN=SQL') cursor = cnxn.cursor() # 执行查询(建议加WHERE条件,避免一次性导出所有数据导致内存压力) cursor.execute("SELECT content FROM digitalassetcontent") # 创建输出目录(不存在则自动创建) output_folder = "./extracted_pdfs" os.makedirs(output_folder, exist_ok=True) # 遍历结果并写入PDF文件 for file_index, row in enumerate(cursor.fetchall(), start=1): pdf_bytes = row.content # 不管是bytearray还是bytes,直接用二进制模式写入即可 with open(os.path.join(output_folder, f"document_{file_index}.pdf"), "wb") as pdf_file: pdf_file.write(pdf_bytes) # 关闭资源 cursor.close() cnxn.close()
额外排查建议
- 验证数据有效性:先取一条数据,打印它的前几个字节,正常PDF的开头应该是
b'%PDF-',如果不是,说明你可能取错了字段,或者数据库里的存储本身有问题。 - 检查数据长度:如果返回的
content长度为0或者异常小(比如只有几十字节),那大概率是数据本身的问题,需要确认数据库里的存储是否正确。
内容的提问来源于stack exchange,提问作者AlliDeacon
相关产品推荐
相关产品推荐

