You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 20:18:02