Android 上传图片到后台的一直方式Base64的String形式
16lz
2021-01-23
Android上传图片到后台的方式有很多种,数据传输追根究底都是IO流,都是byte的字节流。
工作实例:将Android本地的用户头像上传给后台
Person{
private String name;
private String gender;
private String phone;
private String headIco; // 头像图片
}
之前我以为将 读出来的文件byte流用UTF-8编码成字符串就可以上传了, 和后台联调的结果是 后台的哥们解码处理是打不开。是空白;
后来发现这样是不行的 。
原因: 假如我读到的是0x001或者0x002 他们在UTF-8中假如都没有对应的字符,那么UTF-8就用一个未知字符代替他们,那么后台的哥们是一个未知字符,所以他就不知道我上传的是0x01还是0x02了!这样数据就对不上了。
解决方法:用base64编码就可以解决了。
base64的原理是通过一系列的算法将字节流编码为{
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
,
'G'
,
'H'
,
'I'
,
'J'
,
'K'
,
'L'
,
'M'
,
'N'
,
'O'
,
'P'
,
'Q'
,
'R'
,
'S'
,
'T'
,
'U'
,
'V'
,
'W'
,
'X'
,
'Y'
,
'Z'
,
'a'
,
'b'
,
'c'
,
'd'
,
'e'
,
'f'
,
'g'
,
'h'
,
'i'
,
'j'
,
'k'
,
'l'
,
'm'
,
'n'
,
'o'
,
'p'
,
'q'
,
'r'
,
's'
,
't'
,
'u'
,
'v'
,
'w'
,
'x'
,
'y'
,
'z'
,
'0'
,
'1'
,
'2'
,
'3'
,
'4'
,
'5'
,
'6'
,
'7'
,
'8'
,
'9'
,
'+'
,
'/'
,
'='
}这些字符组成的字符串。这样就不会出现未知字符了
代码实现:
FileInputStream file = new FileInputStream(ecgData.getDataUri()); byte[] data = new byte[file.available()];
file.read(data);
strData = Base64.encodeToString(data, Base64.NO_WRAP);
file.close();
更多相关文章
- android使用websocket保持长连接 后台为nodejs带心跳检测
- Android 与 后台网络交互踩坑
- android textview 中超出屏幕宽度的字符 省略号显示
- Android资源文件 - 使用资源存储字符串 颜色 尺寸 整型 布尔值
- 处理固定宽度下的长字符串绘制(Android)
- Android EditText的输入监听,输入字符的动态获取
- android 程序漰溃 后台handle处理类
- Android 判断程序前后台状态