美文网首页
Android文件转Base64

Android文件转Base64

作者: 被咯苏州 | 来源:发表于2017-05-11 13:47 被阅读372次

    前提

    现在的项目要求我们图片上传的时候使用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

          本文链接:https://www.haomeiwen.com/subject/mlsotxtx.html