记录一次Base64.encodeBase64String(data)和BASE64Encoder().encode(data)图片转base64的坑点

问题场景是使用BASE64Encoder().encode(data)将图片转换成base后在本地调试是可以稳定运行的,与前端联调也是没有问题的,但是将服务部署到服务器在页面访问的时候就一直出现转换的图片格式不对的问题,因为BASE64Encoder().encode(data)转换的图片base会有空格什么的,因此也加上了 base64 = base64.replaceAll("\\r\\n","");替换,但是问题依旧没有解决。网上查到的是和base64和BASE64Encoder的区别是加密方式的不同,还有就是转换base64后者出现多余的换行符合空格的问题。感觉问题很奇怪。换成Base64.encodeBase64String(data);后问题解决。
//imagesBase64为远程网络图片地址--url
private String judgPicType(String imagesBase64) {
        //将图片文件转化为字节数组字符串,并对其进行Base64编码处理
        try {
            URL url = new URL(imagesBase64);
            //打开链接
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            //设置请求方式为"GET"
            conn.setRequestMethod("GET");
            //超时响应时间为5秒
            conn.setConnectTimeout(5 * 1000);
            //通过输入流获取图片数据
            InputStream inStream = conn.getInputStream();
            //得到图片的二进制数据,以二进制封装得到数据,具有通用性
            ByteArrayOutputStream outStream = new ByteArrayOutputStream();
            //创建一个Buffer字符串
            byte[] buffer = new byte[1024];
            //每次读取的字符串长度,如果为-1,代表全部读取完毕
            int len = 0;
            //使用一个输入流从buffer里把数据读取出来
            while ((len = inStream.read(buffer)) != -1) {
                //用输出流往buffer里写入数据,中间参数代表从哪个位置开始读,len代表读取的长度
                outStream.write(buffer, 0, len);
            }
            //关闭输入流
            inStream.close();
            byte[] data = outStream.toByteArray();
            //对字节数组Base64编码
            String base64 = Base64.encodeBase64String(data);
//            BASE64Encoder encoder = new BASE64Encoder();
//            String base64 = encoder.encode(data);
//            base64 = base64.replaceAll("\\r\\n","");
            return base64;
        } catch (IOException e) {
            throw BaseException.of(VehicleErrorCode.PARAM_ERROR.of(), "根据图片转base64异常" + e);

        }
    }

 

通过查源码推测感觉是编码方式的问题,浏览器与本地服务的编码一样导致。base64采用的是

Charsets.US_ASCII

而BASE64Encoder采用的是8859_1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值