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();




更多相关文章

  1. android使用websocket保持长连接 后台为nodejs带心跳检测
  2. Android 与 后台网络交互踩坑
  3. android textview 中超出屏幕宽度的字符 省略号显示
  4. Android资源文件 - 使用资源存储字符串 颜色 尺寸 整型 布尔值
  5. 处理固定宽度下的长字符串绘制(Android)
  6. Android EditText的输入监听,输入字符的动态获取
  7. android 程序漰溃 后台handle处理类
  8. Android 判断程序前后台状态

随机推荐

  1. 改变android程序head样式
  2. android的Notification折叠
  3. [ZZ]Android UI Automated Testing
  4. Android初小试---一分钟傻瓜式打包
  5. android studio 提示no android sdk foun
  6. Robotium Recorder的初试
  7. Android各种花式酷炫自定义控件开源库集
  8. 关于RelativeLayout的一点经验
  9. android 4.0 sdk直接下载地址
  10. UI