在dify工作流中需配置文件上传节点支持指定类型并匹配字段名,下游通过代码节点读取$inputs.file.content等字段或直连文档解析节点,生成文件时用bytesio封装并开启“返回文件”,api调用须设置accept头以获取原始文件流。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

在Dify工作流中实现文件上传与下载节点的联动处理,需确保文件从用户端上传后能被后续节点正确读取、解析,并支持按需生成并返回文件供前端下载。若跳过中间文件路径校验或忽略MIME类型约束,工作流可能在运行时抛出FileNotFoundError或触发空内容解析失败。
配置上传节点接收文件
打开工作流画布,拖入「文件上传」节点→双击编辑→在「支持的文件类型」中勾选实际需要的扩展名(如.pdf、.xlsx、.txt),【未勾选的类型将被Dify服务端直接拦截,前端不会报错但文件无法进入流程】。
启用「多文件上传」开关,若业务需批量处理;关闭则仅接受单个文件。上传字段名称默认为file,如需对接已有前端表单,请保持字段名一致,否则后端收不到文件流。
让下游节点读取上传的文件内容
方法一:使用「代码节点」读取二进制内容
在上传节点后连接「代码节点」→语言选Python→输入以下代码:
file_data = $inputs.file.content # 字节流<br>file_name = $inputs.file.name # 原始文件名<br>file_type = $inputs.file.mime_type # MIME类型,如application/pdf
注意:$inputs.file是固定结构,不可写成$inputs.files或$inputs.upload,否则返回None。
方法二:直连「文档解析」节点
上传节点→文档解析节点→选择解析方式(如PDF文本提取、Excel表格转JSON)→输出为text或structured_data字段,供后续LLM或条件判断节点使用。
生成文件并触发下载
第一步:在代码节点中构造响应文件对象
使用Python内置io.BytesIO封装字节内容,例如生成CSV:
import io<br>import csv<br>output = io.BytesIO()<br>writer = csv.writer(output)<br>writer.writerow(["序号", "结果"])<br>writer.writerow([1, $inputs.processed_result])<br>output.seek(0)
第二步:设置节点输出格式为文件响应
在代码节点「高级设置」中开启「返回文件」→填写「文件名」(支持模板变量,如result_{$inputs.file.name}.csv)→选择「Content-Type」为text/csv或application/vnd.openxmlformats-officedocument.spreadsheetml.sheet等对应类型。
第三步:部署后调用API时,必须在请求头中携带Accept: application/json以外的值(如Accept: text/csv),否则Dify默认返回JSON包装体而非原始文件流。【缺少该请求头将导致前端收到200但内容为JSON,而非可下载的文件】










