Base64编码保存为图片,java工具类

import com.weiming.so.nova.common.utils.uuid.UUID;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Base64;

public class Base64FileUtil {

    /**
     * base64 保存为文件
     * 直接获取系统temp目录,文件名UUID
     * @param base64code base64code
     * @return {@link File}
     * @throws IOException ioexception
     */
    public static File base64ToFile(String base64code) throws IOException {
        String tmpdir = System.getProperty("java.io.tmpdir") + File.separator;

        Base64.Decoder decoder = Base64.getDecoder();
        // 前台在用Ajax传base64值的时候会把base64中的+换成空格,所以需要替换回来。
        String baseValue = base64code.replaceAll(" ", "+");
        // 确定第一个逗号,用于截取data:image/jpeg;base64
        int ftIdx = baseValue.indexOf(",") + 1;
        // 文件类型
        String fileType = baseValue.substring(0,ftIdx);
        // 文件内容
        String fileContent = baseValue.substring(ftIdx);
        // 文件后缀
        String fileSuffix =getBase64FileSuffix(fileType);
        // 文件名
        String fileName = UUID.randomUUID() + fileSuffix;
        // 解密
        byte[] b = decoder.decode(fileContent);
        // 创建临时文件
        File file = createFile(tmpdir, fileName);
        // 写入文件
        try(OutputStream outputStream = new FileOutputStream(file)){
            // 处理数据
            for (int i = 0; i < b.length; ++i) {
                if (b[i] < 0) {
                    b[i] += 256;
                }
            }
            outputStream.write(b);
            outputStream.flush();
        }
        return file;
    }

    /**
     * 得到Base64的文件后缀
     *
     * @param iden iden
     * @return {@link String}
     */
    public static String getBase64FileSuffix(String iden){
        if(iden == null || iden.isEmpty()){
            return null;
        }
        if (iden.contains("jpeg")) {
            return ".jpg";
        }else if(iden.contains("png")){
            return ".png";
        }else if(iden.contains("gif")){
            return ".gif";
        }else if(iden.contains("jpg")){
            return ".jpg";
        }
        return null;
    }

    /**
     * 创建临时文件
     *
     * @param filePaht 文件目录
     * @param fileName 文件名称
     * @return {@link File}
     * @throws IOException ioexception
     */
    public static File createFile(String filePaht, String fileName) throws IOException {
        File tempFile = new File(filePaht, fileName);
        if(!tempFile.getParentFile().exists()){
            tempFile.getParentFile().mkdirs();
        }
        if(!tempFile.exists()){
            tempFile.createNewFile();
        }
        return tempFile;
    }
}

posted @ 2021-12-24 10:09  InkYi  阅读(390)  评论(0编辑  收藏  举报