You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:25:01