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

Android端通过JSON Rest服务传输JPG二进制文件遇阻求助

解决Android与Java服务端Base64传输JPG的问题

嘿,我明白你现在的困扰——跨端Base64编码解码总是踩坑对吧?你的问题大概率是Android自带的android.util.Base64和Java标准库的java.util.Base64在编码参数上不匹配导致的,我给你几个可行的解决方案:

方案一:统一编码参数(无需额外库)

Android的Base64.DEFAULT会自动添加换行符来满足RFC 2045的格式要求,但Java标准库的解码器默认不处理这些换行符,直接解码就会抛出类似Unexpected padding的错误。你只需要修改客户端的编码参数:

  • 客户端编码时改用Base64.NO_WRAP,避免生成换行符:
// Android客户端代码
byte[] imageBytes = ...; // 你的JPG二进制数据
String encodedImage = Base64.encodeToString(imageBytes, Base64.NO_WRAP);
  • 服务端解码前先确保字符串没有多余的空格或换行(虽然用NO_WRAP后基本不会有,但保险起见):
// Java服务端代码
String receivedEncodedString = ...; // 从JSON中获取的编码字符串
byte[] decodedImageBytes = Base64.getDecoder().decode(receivedEncodedString.trim());

方案二:使用第三方统一库(更稳妥)

如果不想纠结系统API的差异,推荐用Apache Commons Codec的Base64实现,客户端和服务端都用同一个库,兼容性拉满:

  • 客户端(Android)添加依赖后,编码代码:
import org.apache.commons.codec.binary.Base64;

byte[] imageBytes = ...;
String encodedImage = Base64.encodeBase64String(imageBytes);
  • 服务端(Java)同样用这个库解码:
import org.apache.commons.codec.binary.Base64;

String receivedEncodedString = ...;
byte[] decodedImageBytes = Base64.decodeBase64(receivedEncodedString);

(注:Eclipse里可以直接把commons-codec的jar包导入项目,或者用Maven/Gradle管理依赖)

额外调试技巧

  • 编码后在客户端打印字符串的前20位和后20位,服务端接收后也打印相同位置的内容,对比是否一致——如果不一致,说明JSON传输过程中字符串被转义或截断了,要检查JSON序列化/反序列化的逻辑(比如有没有把双引号转义成\"但解码时没处理)。
  • 可以用在线Base64工具验证编码后的字符串是否能正常解码,排除编码本身的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:03:23