uniapp上传base64到SpringBoot中实现base64转图片保存遇到的问题【Illegal base64 character d】

问题描述

APP端上传图片,使用base64转图片工具类的时候出现异常保存图片失败。而H5端却不会出现报错。
java.lang.IllegalArgumentException: Illegal base64 character d

Base64转图片工具类

package com.ckm.yangle.utils;
import org.springframework.context.annotation.Configuration;

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Base64;

@Configuration
public class Base64ToImage {
    // 对字节数组字符串进行Base64解码并生成图片
    //imgFilePath 待保存的本地路径
    public boolean GenerateImage(String base64Str, String imgFilePath) {
        if (base64Str == null) // 图像数据为空
            return false;

        try {
            // Base64解码
            byte[] bytes = Base64.getDecoder().decode(base64Str);
            for (int i = 0; i < bytes.length; ++i) {
                if (bytes[i] < 0) {// 调整异常数据
                    bytes[i] += 256;
                }
            }
            // 生成jpeg图片
            OutputStream out = new FileOutputStream(imgFilePath);
            out.write(bytes);
            out.flush();
            out.close();
            //====
            return true;
        } catch (Exception e) {
            System.out.println(e);
            return false;
        }
    }
}

H5端的base64输出结果

在这里插入图片描述

APP端的base64输出结果

在这里插入图片描述

APP端写入失败

问题原因

由于APP端上传图片时转成的base64是MIME方式,而MIME方式输出隐射到MIME友好格式。输出每行不超过76字符,并且使用’\r’并跟随’\n’作为分割。编码输出最后没有行分割。
然而H5端是基本方式输出被映射到一组字符A-Za-z0-9+/,编码不添加任何行标,输出的解码仅支持A-Za-z0-9+/。

解决方案

解决方法相对简单,只是将调用Base64解密的方式由getDecoder()替换成getMimeDecoder()后问题就得到了解决。

在这里插入图片描述

写入成功

在这里插入图片描述

更详细内容参考该篇 https://blog.csdn.net/qq_48455576/article/details/121295709

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

令人作呕的溏心蛋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值