package cn.lili.common.utils; import lombok.extern.slf4j.Slf4j; import org.springframework.web.multipart.MultipartFile; import java.io.*; import java.util.Base64; import java.util.Base64.Decoder; /** * base64转为multipartFile工具类 * * @author Chopper */ @Slf4j public class Base64DecodeMultipartFile implements MultipartFile { private final byte[] imgContent; private final String header; public Base64DecodeMultipartFile(byte[] imgContent, String header) { this.imgContent = imgContent; this.header = header.split(";")[0]; } @Override public String getName() { return System.currentTimeMillis() + Math.random() + "." + header.split("/")[1]; } @Override public String getOriginalFilename() { return System.currentTimeMillis() + (int) Math.random() * 10000 + "." + header.split("/")[1]; } @Override public String getContentType() { return header.split(":")[1]; } @Override public boolean isEmpty() { return imgContent == null || imgContent.length == 0; } @Override public long getSize() { return imgContent.length; } @Override public byte[] getBytes() throws IOException { return imgContent; } @Override public InputStream getInputStream() { return new ByteArrayInputStream(imgContent); } @Override public void transferTo(File dest) throws IOException, IllegalStateException { OutputStream stream = null; try { stream = new FileOutputStream(dest); stream.write(imgContent); } catch (IOException e) { log.error("transferTo错误", e); } finally { assert stream != null; stream.close(); } } public static MultipartFile base64Convert(String base64) { String[] baseStrs = base64.split(","); Decoder decoder = Base64.getDecoder(); byte[] b = decoder.decode(baseStrs[1]); for (int i = 0; i < b.length; ++i) { if (b[i] < 0) { b[i] += 256; } } return new Base64DecodeMultipartFile(b, baseStrs[0]); } public static InputStream base64ToInputStream(String base64) { ByteArrayInputStream stream = null; try { byte[] bytes = Base64.getDecoder().decode(base64); stream = new ByteArrayInputStream(bytes); } catch (Exception e) { log.error("base64ToInputStream错误", e); } return stream; } public static String inputStreamToStream(InputStream in) { byte[] data = null; //读取图片字节数组 try { ByteArrayOutputStream swapStream = new ByteArrayOutputStream(); byte[] buff = new byte[100]; int rc = 0; while ((rc = in.read(buff, 0, 100)) > 0) { swapStream.write(buff, 0, rc); } data = swapStream.toByteArray(); } catch (IOException e) { log.error("转码错误", e); } finally { if (in != null) { try { in.close(); } catch (IOException e) { log.error("inputStreamToStream错误", e); } } } return Base64.getEncoder().encodeToString(data); } }