Python如何将PDF转换为二进制Blob格式以适配仅接收Blob文件的API
问题解决方法
核心逻辑说明
Python没有原生的Blob类型,对接要求Blob格式文件上传的API时,使用requests等HTTP请求库时,BytesIO对象或者直接打开的文件对象即可实现和JSBlob完全等价的效果。你之前的代码问题在于没有指定PDF对应的MIME类型,也没有正确将文件对象传入请求的文件字段。
正确实现代码
方案1:直接读取本地PDF上传(最常用)
import requests with open("目标PDF文件路径.pdf", "rb") as pdf_file: # 构造文件上传参数,和JS里的Blob参数一一对应 upload_files = { # inputFile为API要求的接收字段,和你JS代码里的dtoIn.inputFile对应 "inputFile": ( "传给API的文件名.pdf", # 可自定义,建议保留.pdf后缀 pdf_file, "application/pdf" # 对应JS Blob构造的type参数,PDF固定用这个值 ) } # 如有其他普通表单参数可放到data里 other_params = {"额外参数": "参数值"} response = requests.post("你的API接口地址", files=upload_files, data=other_params)
方案2:先封装为BytesIO再上传
如果你的PDF内容不是来自本地文件,需要先处理成二进制再上传,可以用这个方案:
import requests from io import BytesIO # 先读取本地PDF内容,也可以是其他来源生成的PDF二进制数据 with open("目标PDF文件路径.pdf", "rb") as pdf_file: pdf_binary = pdf_file.read() # 封装为BytesIO对象,等价于JS里的Blob pdf_blob = BytesIO(pdf_binary) # 上传逻辑和方案1一致 upload_files = { "inputFile": ("传给API的文件名.pdf", pdf_blob, "application/pdf") } response = requests.post("你的API接口地址", files=upload_files)
注意事项
- 字段名必须和API要求的接收字段一致,如果你当前对接的API字段不是
inputFile,需要对应修改 - MIME类型不要写错,传PDF必须用
application/pdf,不要复用你参考的JS示例里的application/json - 部分API会校验文件名后缀,建议自定义文件名时保留
.pdf后缀,避免被拦截
内容的提问来源于stack exchange,提问作者wolfrevo kcata
相关产品推荐
相关产品推荐

