需修改Dify的四组上传限制参数、扩展allowed_file_extensions清单,并为大Excel配置openpyxl流式读取,最后通过curl和调试节点验证并重启服务。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

在Dify工作流中处理用户上传的PDF报告、500MB培训视频或含百万行数据的Excel文件时,常因默认15MB单文件限制和格式白名单缺失导致上传直接失败,必须手动突破系统硬编码边界才能继续后续分析流程。
修改核心上传限制参数
打开 docker/.env 文件,定位并修改以下四组关键变量:
UPLOAD_FILE_SIZE_LIMIT=1024(单位MB,覆盖所有文档类型)
UPLOAD_VIDEO_FILE_SIZE_LIMIT=10000(视频单独放宽至10GB)
NGINX_CLIENT_MAX_BODY_SIZE=10000M(Nginx层必须同步放大,否则前端直接报413错误)
WORKFLOW_FILE_UPLOAD_LIMIT=50(工作流节点单次允许接入的文件数)
注意:NGINX_CLIENT_MAX_BODY_SIZE值必须带单位M,写成10000会失效;若漏改此项,即使后端配置正确,浏览器仍提示“请求体过大”。
扩展支持的文件类型清单
编辑 DSL/Artifact.yml 文件,在 file_upload 节点下调整 allowed_file_extensions 列表:
将 .XLSX、.PPTX、.ZIP、.LOG 显式加入扩展名数组,例如:
- .XLSX
- .PPTX
- .ZIP
- .LOG
allowed_file_types 保持为 [archive, document, image, video, audio] 即可,Dify会自动映射扩展名到对应类型。添加 .LOG 后,日志文本能绕过document类型校验直接进入解析链。
大Excel文件的流式解析配置
当工作流接收到超过10MB的Excel文件时,需强制启用流式读取避免内存溢出:
第一步:在文件上传节点后插入「代码」节点
第二步:粘贴以下Python逻辑(依赖 openpyxl 3.1+):
from openpyxl import load_workbook
def main(file_path):
wb = load_workbook(filename=file_path, read_only=True, data_only=True)
ws = wb.active
rows = []
for i, row in enumerate(ws.iter_rows(values_only=True)):
if i >= 10000: break # 仅取前1万行防卡死
rows.append(list(row))
wb.close()
return {"data": rows}
第三步:将该节点输出类型设为 Object,否则下游无法解析嵌套结构
这一步必须关闭 read_only=False,否则 openpyxl 会尝试加载全部样式元数据,100MB文件可能触发OOM而非超时。
验证配置是否生效
方法一:上传一个23MB的PDF文件,观察是否跳过“文件过大”提示直接进入解析阶段
方法二:用 curl 命令测试Nginx层限制:
curl -X POST http://localhost:3000/api/v1/files/upload -H "Authorization: Bearer YOUR_TOKEN" -F "file=@test_50mb.zip"
若返回 HTTP 413,则说明 NGINX_CLIENT_MAX_BODY_SIZE 未生效或未重启服务
方法三:在工作流中添加「调试」节点,打印 input.file.size 字段,确认值为真实字节数而非被截断后的15MB
重启Dify服务使配置落地
执行以下命令顺序:
docker compose down → 等待所有容器完全退出 → docker compose up -d
切记不要跳过 down 步骤,仅用 restart 会导致旧配置残留
重启完成后,访问 Dify UI 的「工作流调试面板」,上传测试文件验证全流程是否贯通










