base64转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"));
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值