我是靠谱客的博主 机智白猫,最近开发中收集的这篇文章主要介绍base64转File、base64转CommonsMultipartFilebase64转File、base64转CommonsMultipartFile,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

base64转File、base64转CommonsMultipartFile

在实际开发中处理图片会使用到base64,无论是crud还是IO都可能会使用到base64,下面是两种base64转为目标类型的方法

base64转File

public static File base64ToFile(String base64) {
        if (base64 == null || "".equals(base64)) {
            return null;
        }
        String[] str = base64.split(",");
        //getRealImgeStr 方法 截取bese64字符串 逗号后半部分有用的字符串
        BASE64Decoder decoder = new BASE64Decoder();
        byte[] buff = new byte[0];
        try {
            buff = decoder.decodeBuffer(str[1]);
        } catch (IOException e) {
            e.printStackTrace();
        }
        File file = null;
        FileOutputStream fout = null;
        try {
            file = File.createTempFile("tmp", ".jpg");
            fout = new FileOutputStream(file);
            fout.write(buff);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fout != null) {
                try {
                    fout.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return file;
    }

base64转CommonsMultipartFile

该方法基于第一个base64转File的方法,故而两种方法可以直接写到工具类中,用来类型转换使用

public static CommonsMultipartFile base64toMultipartFile(String base64filestr) throws IOException {
        final File file = base64ToFile(base64filestr);
        DiskFileItem item = (DiskFileItem) new DiskFileItemFactory().createItem(file.getName(), "image/jpeg", false,
                file.getName());
        InputStream input = null;
        try {
            input = new FileInputStream(file);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        OutputStream os = null;
        try {
            os = item.getOutputStream();
            if (input != null) {
                int ret = input.read();
                while (ret != -1) {
                    os.write(ret);
                    ret = input.read();
                }
                os.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (null != os) {
                os.close();
            }
            if (null != input) {
                input.close();
            }
        }
        return new CommonsMultipartFile(item);
    }

*******import ******

此处为上述两种方法的import

import org.apache.commons.fileupload.disk.DiskFileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import sun.misc.BASE64Decoder;

import java.io.*;

入参的base64截取

以下为入参截取base64的核心代码

   List<Map<String, String>> photoList = new ArrayList<>();
   int ch = 0, start, end;
   while (ch < paramMap.get("CONTENT").length()) {
       Map photoMap = new HashMap();
       // 索引出现负数,说明在源字符串指定位置之后已经没有 '{' 或者 '}'
       start = paramMap.get("CONTENT").indexOf("<img src="data:image/jpeg;base64,", ch);
       //从匹配到图片标签开始截取
       ch = start;
       end = paramMap.get("CONTENT").indexOf("">", ch);
       // substring 内部索引禁止出现负数
       if (start == -1 || end == -1) {
            break;
       }
       String tmp = paramMap.get("CONTENT").substring(start + 10, end);
       //保存上一次截取时的索引
       ch = end + 1;
       photoMap.put("bytes", tmp.substring(23));
       photoMap.put("start", start + 10);
       photoMap.put("end", end);
       photoList.add(photoMap);
   }

base64转CommonsMultipartFile

以下为调用的核心代码

Base64ToCommonsMultipartFile base64ToCommonsMultipartFile = new Base64ToCommonsMultipartFile();
//base64转为MultipartFile
MultipartFile multFile = base64ToCommonsMultipartFile.base64toMultipartFile(photoList.get(i).get("bytes"));

最后

以上就是机智白猫为你收集整理的base64转File、base64转CommonsMultipartFilebase64转File、base64转CommonsMultipartFile的全部内容,希望文章能够帮你解决base64转File、base64转CommonsMultipartFilebase64转File、base64转CommonsMultipartFile所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部