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

Java处理用户头像字节数组报Illegal base64 character 3a错误如何解决

问题原因

你触发报错的核心原因是:data:image/jpeg;base64,是Data URI协议的标识前缀,本身不属于Base64编码的合法字符范围,报错信息里的3a就是前缀里冒号(:)对应的ASCII码,你将带前缀的字符串直接传入Base64解码方法,自然会触发非法字符校验报错。

同时你的业务逻辑本身存在设计问题:你拼接前缀的目的是为了让浏览器可以直接识别图片,这个拼接后的字符串是给前端渲染用的文本格式,完全不需要再解码转回字节数组存回头像字段。就算你能绕过解码报错,把前缀对应的字节写入图片二进制数据里,最终得到的文件也是损坏的,无法正常打开。

解决方法

分两种常用业务场景调整代码即可:

场景1:后端直接返回前端可直接使用的图片Data URI

给UserEntity实体类新增一个String类型的字段,比如propicUri,专门用来返回拼接好的图片标识字符串,不需要修改原有的propic字节数组字段:

@GetMapping("/getUser")
public UserEntity getUser(@RequestHeader("nickname") String nickname) {
    UserEntity user = userDAO.findUserByNickname(nickname);
    byte[] propicBytes = decompressBytes(user.getPropic());
    // 原字节数组字段可以保留,也可以根据需要配置不返回给前端
    user.setPropic(propicBytes);
    // 拼接好的Data URI存入新增的字符串字段返回
    String propicUri = "data:image/jpeg;base64," + Base64Utils.encodeToString(propicBytes);
    user.setPropicUri(propicUri);
    return user;
}

场景2:前端自行拼接前缀

你可以直接返回Base64编码后的图片字符串,或者直接返回原字节数组,由前端完成编码、拼接前缀的操作即可,不需要后端做拼接再解码的多余操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:24:06