echo 'iVBORw0KGgoAAAANSUhEUg...' | base64 -d > avatar.png file avatar.png
调试接口用 protojson 输出,头像字段显示成 iVBORw0KGgoAAAANSUhEUg...,前端把它当图片地址塞进 img 的 src,页面全是一堆字母。先别急着动参数,把报错原文和时间点记下来,顺序反了容易白折腾。
原因不复杂,protobuf 的 JSON 映射规定 bytes 用标准 base64 字符串表示,不会给你原始二进制。生成的 JSON 看起来像普通字符串,前端很难从类型上分辨。
围绕「Protobuf JSON bytes」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。改完隔一天再看一次,当场正常不代表能稳住。
测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。
处理上按这个顺序:在接口文档里标明这个字段是 base64 让前端自己解码;需要直接给 URL 的话在服务端先上传对象存储 返回地址;调试时用 jq 解码确认内容是不是图片;别在网关层做自动解码 会把所有 bytes 字段改坏。
改完只确认一件事:base64 解出来是合法 PNG 前端按 data URL 渲染正常。
