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

Azure Data Factory带Cookie下载PDF至ADLS2及转PDF修复

解决Databricks提取PDF二进制字符串转文件损坏的问题

问题核心

你当前的代码逻辑完全错误,导致无法还原原始PDF二进制内容:原代码将字符串转成UTF-8字节后做Base64编码,再解码,这相当于绕了一圈又回到了原字符串的UTF-8编码,根本没处理存储在Response里的原始PDF二进制数据,所以生成的文件必然损坏。

针对不同Response内容格式的解决方案

首先需要明确pdf_content_string的实际格式,对应以下处理方式:

情况1:Response内容是URL编码的二进制字符串(开头为%PDF)

HTTP活动返回的JSON中,二进制内容常被URL编码(每个字节用%XX表示),此时用URL解码即可还原原始字节:

from urllib.parse import unquote_to_bytes

# 解码URL编码的字符串,得到原始PDF字节
pdf_bytes = unquote_to_bytes(pdf_content_string)

# 写入ADLS Gen2(注意Databricks路径需用/dbfs前缀或dbutils操作)
with open("/dbfs/mnt/your-adls-container/path/output.pdf", "wb") as f:
    f.write(pdf_bytes)

# 或直接用dbutils写入
# dbutils.fs.put("/mnt/your-adls-container/path/output.pdf", pdf_bytes, overwrite=True)

情况2:Response内容是字节字符串的repr形式(如b'%PDF-1.4...')

如果字符串是Python字节对象的字符串表示(带b'前缀和'后缀),需先清理格式再用Latin-1编码还原字节(Latin-1保证每个字符对应一个原始字节):

# 移除字节字符串的标识前缀和引号
clean_content = pdf_content_string.strip("b'\"")
# 用Latin-1编码还原原始二进制
pdf_bytes = clean_content.encode('latin-1')

# 写入文件
with open("/dbfs/mnt/your-adls-container/path/output.pdf", "wb") as f:
    f.write(pdf_bytes)

情况3:Response内容是Base64编码字符串

如果确认Response里的字符串是Base64编码后的PDF内容,直接解码即可:

import base64

pdf_bytes = base64.b64decode(pdf_content_string, validate=True)

# 写入文件
with open("/dbfs/mnt/your-adls-container/path/output.pdf", "wb") as f:
    f.write(pdf_bytes)

验证方法

可以先打印pdf_content_string的前20个字符,判断其格式:

  • 开头是%PDF → 情况1
  • 开头是b'%PDF → 情况2
  • 开头是类似JVBERi0xLjQK → 情况3(Base64编码的PDF开头)

内容的提问来源于stack exchange,提问作者Javier de la Iglesia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 11:03:25