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

Kotlin Android使用XML-RPC向Odoo发送BASE64图片传输过慢问题咨询

问题根因及优化方案

  • 开启XML-RPC请求压缩
    Apache XML-RPC默认不开启请求压缩,而Odoo网页端上传默认启用gzip压缩,6MB的base64内容压缩后体积可减少70%以上,大幅降低传输耗时。你可以在初始化XmlRpcClient配置时开启压缩:
val config = XmlRpcClientConfigImpl()
// 开启请求gzip压缩
config.isGzipCompressing = true
// 要求服务端返回压缩响应
config.isGzipRequesting = true
  • 替换Base64编码实现
    Apache XML-RPC内置的Base64序列化实现效率极低,处理大文件时会占用大量CPU时间导致耗时增加。你可以提前用安卓原生android.util.Base64将图片编码为字符串后再传入请求参数,跳过库自带的序列化逻辑,编码速度可提升3~10倍。
  • 复用HTTP连接
    不要每次上传都新建XmlRpcClient实例,全局复用同一个实例即可复用底层TCP连接,减少HTTPS握手、TCP慢启动的额外耗时,单请求可减少1~3秒的连接开销。
  • 精简请求参数
    调用Odoo接口创建附件时,仅传入必填参数即可:datas(base64内容)、name(文件名)、res_model(关联模型)、res_id(关联记录ID)、datas_fname(文件显示名),多余的非必填参数会增加Odoo服务端处理时间。
  • 替换XML-RPC实现(可选)
    Apache XML-RPC最后稳定版发布于2017年,未针对移动端做性能优化,你可以直接用OkHttp自行构造XML-RPC请求体,配合Okio做序列化,整体传输耗时可再降低50%以上。

你提到的多线程上传耗时无差异的现象,说明当前瓶颈并非带宽,而是单请求的序列化、连接建立耗时,完成前几项优化后即可解决700KB文件传输耗时8秒的问题。

内容的提问来源于stack exchange,提问作者Heromanofe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:54:04