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',
byte[] data = new byte[file.available()];
file.read(data);
strData = Base64.encodeToString(data, Base64.NO_WRAP);
file.close();