Odoo文件上传大小限制修改指南:从25MB到自定义(附各版本源码位置)

Odoo文件上传大小限制修改指南:从25MB到自定义(附各版本源码位置) Odoo文件上传限制深度优化指南从源码修改到系统级配置作为企业级ERP系统的核心组件Odoo的文件上传功能经常成为业务流程中的瓶颈。许多团队在实施过程中发现默认的25MB限制根本无法满足现代办公场景需求——无论是工程设计图纸、多媒体素材还是批量数据导入这个阈值都显得捉襟见肘。本文将彻底解决这个痛点不仅提供各版本源码修改方案还会揭示更安全的系统级配置方法。1. 理解Odoo文件上传机制的多层限制Odoo的文件上传限制实际上是一个复合型约束体系开发者需要理解其三个关键层级前端JavaScript验证层负责用户界面的即时反馈Python中间件处理层处理实际的文件传输逻辑Web服务器代理层Nginx/Apache等服务的独立限制注意仅修改前端代码会导致验证绕过但上传失败必须确保各层级限制同步调整以Odoo 16为例完整的限制检查流程如下sequenceDiagram 用户-前端JS: 选择文件(25MB) 前端JS---用户: 显示错误提示 用户-Python控制器: 绕过JS上传大文件 Python控制器-Web服务器: 转发请求 Web服务器---Python控制器: 返回413错误 Python控制器---用户: 传输失败2. 各版本Odoo源码修改全攻略2.1 Odoo 12-14版本修改方案对于较老版本主要修改点集中在静态JS文件中。以Odoo 12为例定位核心验证文件find /odoo12/source -name basic_fields.js -exec grep -l 25 * 1024 {} \;修改web/static/src/js/fields/basic_fields.js第1414行// 原始代码 file_size: 25 * 1024 * 1024, // 修改为示例调整为100MB file_size: 100 * 1024 * 1024,清理缓存并重启服务sudo service odoo restart sudo rm -rf /var/lib/odoo/.local/share/Odoo/cache/*2.2 Odoo 15-16版本的特殊处理新版本将上传逻辑迁移到了slides模块中需要修改不同文件版本文件路径关键行号搜索关键词Odoo15website_slides/static/src/js/slides_upload.js441attachmentUploadOdoo16website_slides/static/src/js/slides_upload.js561MAX_FILE_SIZE典型修改示例// Odoo15/16通用修改方案 const MAX_FILE_SIZE 25 * 1024 * 1024; // 修改此处的25为所需值2.3 Odoo 17的全新架构调整从Odoo 17开始上传机制进行了重大重构需要修改两个关键位置Python HTTP核心配置(odoo/http.py)# 查找以下参数并修改 DEFAULT_MAX_UPLOAD_SIZE 25 * 1024 * 1024前端工具库配置(web/static/src/core/utils/files.js)export const MAX_FILE_SIZE 25 * 1024 * 1024;重要提示Odoo 17需要同时修改前后端配置才能生效3. 超越源码修改系统级优化方案单纯修改源码存在升级兼容性问题推荐以下更健壮的解决方案3.1 使用配置参数覆盖Odoo 15在配置文件odoo.conf中添加[options] web.max_file_upload_size 268435456 # 256MB优势无需修改源码升级时自动保留设置支持动态调整3.2 Web服务器级调整Nginx配置示例client_max_body_size 256M; client_body_buffer_size 128M; proxy_read_timeout 300s;Apache配置示例LimitRequestBody 2684354563.3 数据库存储优化大文件上传还需考虑存储配置ALTER SYSTEM SET max_locks_per_transaction 256; -- 对于PostgreSQL数据库特别重要4. 企业级部署的最佳实践分级存储策略≤50MB直接存数据库50MB-1GB文件系统存储≥1GB对象存储集成AWS S3/阿里云OSS健康检查监控# 监控上传失败的请求 grep 413 Request Entity Too Large /var/log/nginx/access.log客户端优化技巧// 分片上传实现示例 const chunkSize 10 * 1024 * 1024; // 10MB分片 for (let start 0; start file.size; start chunkSize) { const chunk file.slice(start, start chunkSize); await uploadChunk(chunk); }5. 疑难问题排查指南当修改未生效时按此流程排查确认所有服务已重启sudo systemctl restart odoo nginx检查浏览器缓存// 强制刷新缓存 location.reload(true);验证配置加载顺序[options] ; 确保自定义配置在最后加载检查多组件限制冲突# 查看当前生效的限制 grep -r max_file_upload_size /etc/对于超大规模文件2GB传输建议考虑专用文件传输服务集成方案而非单纯调整上传限制。