• java图片转成base64传给前端


    base64

    1.base64的含义
    2.base64的java转换

    1.base64的含义

    Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,在发送电子邮件时,服务器认证的用户名和密码需要用Base64编码,附件也需要用Base64编码。

    Base64要求把每三个8Bit的字节转换为四个6Bit的字节(38 = 46 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。

    原文的字节最后不够3个的地方用0来补足,转换时Base64编码用=号来代替。这就是为什么有些Base64编码会以一个或两个等号结束的原因,但等号最多只有两个。

    2.base64的java转换

    2.1 使用BASE64Encoder

    public String querySignImage(Integer doctorId) {
            BASE64Encoder encoder = new sun.misc.BASE64Encoder();
    
            if (doctorId != null){
                //获取图片地址
                String signImgUrl = baseMapper.selectById(doctorId).getSignImg();
    
                //读取路径下面的文件(此文件路径为本机的绝对路径)
                File file = new File(urlConstant.getRESOURCE_IMG_PATH() + urlConstant.getIMG_READ_PACKAGE().get(5) + signImgUrl.substring(signImgUrl.lastIndexOf('/')));
                byte[] data = null;
                try {
                    FileInputStream fileInputStream = new FileInputStream(file);
                    int available = fileInputStream.available();
                    data = new byte[available];
                    fileInputStream.read(data);
                    fileInputStream.close();
                    String trim = encoder.encodeBuffer(data).trim();
                    String s = trim.replaceAll("\n", "").replaceAll("\r", "");
                    String substring = signImgUrl.substring(signImgUrl.lastIndexOf('.')+1);
                    return "data:image/" + substring + ";base64,"+s;
                } catch (IOException e) {
                    throw  new ServiceException(e.getMessage());
                }
            }else {
                throw new ServiceException("查询签名时医生id不能为空!");
            }
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    说明这个BASE64Encoder 有可能随时被删除的可能所以网上建议apache commons.codec下的Base64替代。

    2.2 apache commons.codec的base64

    引入依赖

    <dependency>
        <groupId>commons-codecgroupId>
        <artifactId>commons-codecartifactId>
        <version>${commons-codec.version}version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    图片转成base64

    public class base64Util {
    
        //绝对路径
        public String imgBase64(String url) {
            String s = null;
            String substring = url.substring(url.lastIndexOf('.')+1);
            try {
                //"E:/static-resource/ihospital/doctorSign/doctor_sign_img-1.png"
                File imgFile =  new File(url);
                byte[] data = null;
                FileInputStream fileInputStream = new FileInputStream(imgFile);
                int available = fileInputStream.available();
                data = new byte[available];
                fileInputStream.read(data);
                fileInputStream.close();
                s = Base64.encodeBase64String(data);
                s.replaceAll("\n", "").replaceAll("\r", "");
            } catch (IOException e) {
                e.printStackTrace();
            }
            return "data:image/" + substring + ";base64,"+ s;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    架构风格区别-架构案例(五十九)
    仿大众点评——秒杀系统部分01
    如何用 Python 做一个简单的翻译工具?
    申博|2024国内985院校申博时间参考
    python 数据保存格式的选择
    「算法小记」-1:Ackermann函数/阿克曼函数的一点思考解法【递归/非递归/堆栈方法】(C++ )
    Python的基础语法(九)(持续更新)
    记一次:Python的学习笔记五(Django集成swagger)
    java基础09
    免费 Copilot 用户可以访问 OpenAI 的 GPT-4 Turbo;面向 3D 虚拟环境的多面手 AI 代理
  • 原文地址:https://blog.csdn.net/weixin_45637920/article/details/126123741