base64转本地文件方法

本文介绍了如何处理富文本编辑器中粘贴的Base64格式图片,以避免数据库空间急剧增长。通过将Base64图片转换为本地文件并存储,然后替换为实际文件地址,可以有效地管理和优化存储。提供的Java代码示例展示了从Base64字符串转换为图片文件的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

日常我们在保存图片的时候,会将图片放到服务器本地或者上传到其他服务器,然后将图片的路径放入到数据库,这样既可以减小数据库占用空间,又可以减轻数据库的操作压力。

但富文本编辑器有时候会被粘贴进来base64的图片,如果直接将这种类型的数据入库会使数据库占用空间急剧增长,很不合理。这时候我们理想的状态就是将base64图片转成图片文件存储起来,将base64地址替换为文件的实际地址。

base64转本地文件方法


/**
 * base64图片转为本地文件
 *
 * @param baseStr base64图片地址
 * @return 图片文件
 */
private static File base64ToFile (String baseStr) {
        BASE64Decoder decoder = new BASE64Decoder();
        try {
            Base64ImgInfo base64ImgInfo = getBase64ImgInfo(baseStr);
            if (base64ImgInfo == null) {
                return null;
            }
            byte[] b = decoder.decodeBuffer(base64ImgInfo.getImgStr());
            // 处理数据
            for (int i = 0; i < b.length; ++i) {
                if (b[i] < 0) {
                    b[i] += 256;
                }
            }
            return File.createTempFile(UUID.randomUUID().toString(), base64ImgInfo.getType());
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }

    }

    /**
     * 获取base64图片信息
     *
     * @param baseStr base64字符串
     * @return base64图片信息
     */
    private static Base64ImgInfo getBase64ImgInfo(String baseStr) {
        //允许的图片格式(可配置)
        String imgType = "jpg,png,jpeg,gif";
        if (!StringUtils.isEmpty(imgType)) {
            String[] imgTypes = imgType.split(",");
            Pattern pattern;
            Matcher matcher;
            String regex;
            for (String v : imgTypes) {
                regex = MessageFormat.format("data:image/{0};base64,", v);
                pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
                matcher = pattern.matcher(baseStr);
                if (matcher.lookingAt()) {
                    Base64ImgInfo base64ImgInfo = new Base64ImgInfo();
                    base64ImgInfo.setImgStr(matcher.replaceFirst(""));
                    base64ImgInfo.setType("." + v);
                    return base64ImgInfo;
                }
            }
        }
        return null;
    }

    @Data
    public static class Base64ImgInfo {
        /**
         * 图片格式,比如.png
         */
        private String type;

        /**
         * base64正文部分,去除前面data:image/png;base64,标识
         */
        private String imgStr;
    }

通过调用方法base64ToFile 就可以获取到base64转换的图片文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值