Dify工作流中需将PDF/Word等文件转Base64编码后传递:上传文件路径为user_file.0.path,用Python代码节点读取并base64编码;解码时须去除Data URI前缀,写入/tmp临时文件并校验长度。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

在Dify工作流中处理用户上传的PDF、Word等文档时,必须将原始文件转换为Base64编码字符串,才能安全嵌入HTTP请求体或传入下游代码节点进行解析——因为Dify工作流节点间仅支持文本/JSON类型变量,【二进制文件对象无法直接跨节点传递】。
获取上传文件的本地路径
在用户输入节点配置字段类型为「文件列表」后,Dify会自动将每个上传文件保存至沙箱临时目录,并通过变量(如user_file.0.path)暴露其绝对路径。
该路径形如/tmp/dify_files/abc123.pdf,仅在当前工作流执行生命周期内有效,不可硬编码或持久化引用。
若需批量处理多个文件,请用列表操作器节点遍历user_file数组,逐个提取.path字段。
用代码节点执行Base64编码
方法一:Python内置方案(推荐)
添加「代码执行」节点,语言选Python,粘贴以下代码:
import base64<br>with open(workflow.input.file_path, "rb") as f:<br> encoded = base64.b64encode(f.read()).decode("utf-8")<br>workflow.output({"base64_content": encoded})
注意:此处file_path需替换为上游传入的实际变量名,例如user_file.0.path;【不校验文件是否存在,路径错误将直接报错中断流程】。
方法二:JavaScript方案(适用于前端预处理或轻量场景)
若已在前端完成Base64编码,可跳过此步,直接将编码字符串作为文本变量传入工作流。Dify对字符串长度无硬性限制,但单次HTTP请求建议控制在10MB以内。
将Base64还原为二进制文件流
第一步:确认Base64字符串不含Data URI前缀
检查输入字符串是否以data:application/pdf;base64,开头。如有,必须先用.split(",")[1]截取纯Base64段,否则解码失败。
第二步:在代码节点中执行解码
Python示例:
import base64<br>import os<br>raw = workflow.input.base64_content<br>decoded = base64.b64decode(raw)<br># 生成唯一临时文件名<br>filename = f"decoded_{hash(raw[:10]) % 10000}.bin"<br>file_path = os.path.join("/tmp", filename)<br>with open(file_path, "wb") as f:<br> f.write(decoded)<br>workflow.output({"file_path": file_path})
这一步操作起来很简单,直接把代码复制进去就行。生成的file_path可用于后续文档解析、OCR调用或HTTP上传节点。
第三步:验证文件完整性(可选但强烈建议)
在解码后追加校验逻辑:if len(decoded) == 0: raise ValueError("Base64解码结果为空"),避免空内容导致下游节点静默失败。


















