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这两种试试, 我还没有试过.

你可能感兴趣的:(Android文件转Base64)