如何在Mackoon响应中返回文件内容?将PDF转为Base64存入JSON
实现方案:在Mackoon中返回含Base64格式PDF的JSON响应
步骤1:读取本地PDF文件
用二进制模式读取文件,确保获取原始字节内容,避免编码破坏PDF结构:
with open("your_target.pdf", "rb") as pdf_file: pdf_raw_bytes = pdf_file.read()
步骤2:转换为Base64字符串
使用Python内置base64模块完成编码,最后转成UTF-8字符串(JSON仅支持字符串类型):
import base64 pdf_base64_str = base64.b64encode(pdf_raw_bytes).decode("utf-8")
步骤3:封装到JSON响应
根据Mackoon的响应机制,构造包含data字段的JSON返回。假设Mackoon的响应写法类似常见Web框架:
from mackoon import make_response # 适配Mackoon的响应生成方式 def generate_pdf_json_response(): # 读取并转换PDF with open("your_target.pdf", "rb") as pdf_file: pdf_raw_bytes = pdf_file.read() pdf_base64_str = base64.b64encode(pdf_raw_bytes).decode("utf-8") # 返回带data字段的JSON return make_response({"data": pdf_base64_str}, 200)
替代方案:直接返回PDF二进制流(更高效)
如果业务允许不把内容放在JSON的data字段,直接返回PDF流能避免Base64带来的30%体积膨胀,更适合大文件:
def generate_pdf_stream_response(): with open("your_target.pdf", "rb") as pdf_file: pdf_raw_bytes = pdf_file.read() return make_response( pdf_raw_bytes, 200, { "Content-Type": "application/pdf", "Content-Disposition": "inline; filename=result.pdf" } )
关键注意点
- 必须用二进制模式(
rb)读取PDF,否则会损坏文件内容。 - 若PDF体积超过10MB,优先选择直接返回二进制流,避免Base64导致响应过大。
- 文件路径建议使用项目根目录的绝对路径,防止因运行环境差异出现路径错误。
内容的提问来源于stack exchange,提问作者SkorpEN
相关产品推荐
相关产品推荐

