Android文件转Base64

前提

现在的项目要求我们图片上传的时候使用Base64上传图片,我原来的做法是这样的

Bitmap smallBitmap = null;
String base64Url = null;
try {
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inSampleSize = 1;
    options.inJustDecodeBounds = false;
    smallBitmap = BitmapFactory.decodeFile(filePath, options);
    byte[] photoData = BitmapUtil.bitmap2bytes(smallBitmap);
    base64Url = Base64.encodeToString(photoData, Base64.NO_WRAP);
} catch (Exception e) {
    e.printStackTrace();
    base64Url = "";
}

1.获取到图片的Bitmap
2.将Bitmap转化为byte[]
3.将byte[]转化为string
** 在第一步会导致接下来的值变大,在第一步会导致接下来的值变大,在第一步会导致接下来的值变大 **
比如说图片50K,然后从步骤2到步骤3会导致返回的string变为100K(根据手机的屏幕高宽和屏幕密度而不同)

解决方案

// https://mvnrepository.com/artifact/commons-codec/commons-codec base64库
compile group: 'commons-codec', name: 'commons-codec', version: '1.5'
int size = (int) file.length();
byte[] bytes = new byte[size];
try {
    BufferedInputStream buf = new BufferedInputStream(new FileInputStream(file));
    buf.read(bytes, 0, bytes.length);
    buf.close();
} catch (Exception e) {
    LogUtils.e("base64 文件转byte64", e);
}
byte[] encodedBytes = org.apache.commons.codec.binary.Base64.encodeBase64(bytes);
byte[] decodedBytes = org.apache.commons.codec.binary.Base64.decodeBase64(encodedBytes);
String base64Url = Base64.encodeToString(decodedBytes, Base64.NO_WRAP);

1.gradle引入apache公司的Base64帮助类
2.使用如上代码,虽然会也会变大,但是没那么夸张了.

最后

上传图片最好别使用Base64这种方式,可以使用requestbody,multipart这两种试试, 我还没有试过.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,269评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,640评论 25 709
  • 相传千利休在做丰臣秀吉的茶道老师之时,秀吉在利休的陪同下来到京都大德寺的大仙院。大仙院一向以拥有枯山水的庭院闻名于...
    和寂庵阅读 609评论 0 1
  • 现在每周都挺期待周末的,时间轻松自由,看书做饭做家务或者带侄女出去玩。 又是一个周末,明天要去同学家了。好开心。 ...
    w尺素寸心阅读 348评论 0 1
  • 我把人生分为三个年龄段,年少,年中,年老。三个年龄段又有不同的分工,年少时谋成绩,中年谋生,人到老年,健康又称为第...
    叶风阅读 236评论 0 0