Odoo 14如何上传APK至Binary字段并保留原文件名下载 解决过滤失效问题
Odoo14 APK上传限制+原文件名下载解决方案
1. 调整模型层代码
首先给原有模型增加文件名存储字段,同时添加后端格式校验,避免前端规则被恶意绕过:
# model.py from odoo import models, fields, api, exceptions class AppVersion(models.Model): # 原有模型定义保留 apk_file = fields.Binary('Apk文件', required=True) # 新增字段存储原始文件名 apk_filename = fields.Char('APK文件名') @api.constrains('apk_file', 'apk_filename') def _check_apk_format(self): for record in self: if record.apk_filename and not record.apk_filename.lower().endswith('.apk'): raise exceptions.ValidationError('仅允许上传后缀为.apk的安卓安装包文件')
2. 调整Form视图XML代码
Odoo14起Binary字段的filters参数已废弃,格式限制需要在视图层通过options配置,同时绑定filename字段即可解决下载自动打包ZIP的问题:
<!-- 对应app.version的form视图代码片段 --> <field name="apk_file" widget="binary" filename="apk_filename" options="{'accepted_file_extensions': '.apk'}" /> <!-- 文件名字段可设置为隐藏,也可展示给用户查看 --> <field name="apk_filename" invisible="1"/>
效果说明
- 上传时前端会自动过滤非.apk后缀的文件,后端校验双重保障不会出现非法格式上传
- 下载时Odoo会读取绑定的
apk_filename字段作为下载文件名,直接输出.apk文件,不会再自动打包为zip
内容的提问来源于stack exchange,提问作者ryanhex53
相关产品推荐
相关产品推荐

