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输出结果

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

APP端的base64输出结果

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

APP端写入失败

问题原因

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

解决方案

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

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

写入成功

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

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

你可能感兴趣的:(uniapp学习笔记,Spring学习笔记,uni-app,spring,boot,java)