1前言:没有前言,直接上代码。
package com.wheat.sunshine.pay.provider.utils;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
/**
* @Title:Base64DecodedMultipartFile
* @Author: lys
* @Date:2020/12/18
* @Descrption:
*/
public class Base64DecodedMultipartFile implements MultipartFile {
private final byte[] imgContent;
private final String header;
public Base64DecodedMultipartFile(byte[] imgContent, String header) {
this.imgContent = imgContent;
this.header = header.split(";")[0];
}
@Override
public String getName() {
// TODO - implementation depends on your requirements
return System.currentTimeMillis() + Math.random() + "." + header.split("/")[1];
}
@Override
public String getOriginalFilename() {
// TODO - implementation depends on your requirements
return System.currentTimeMillis() + (int)Math.random() * 10000 + "." + header.split("/")[1];
}
@Override
public String getContentType() {
// TODO - implementation depends on your requirements
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() {
return imgContent;
}
@Override
public InputStream getInputStream() {
return new ByteArrayInputStream(imgContent);
}
@Override
public void transferTo(File dest) throws IOException, IllegalStateException {
new FileOutputStream(dest).write(imgContent);
}
}
package com.wheat.sunshine.pay.provider.utils;
import org.springframework.web.multipart.MultipartFile;
import sun.misc.BASE64Decoder;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.Base64;
/**
* @Description:
* @Author: lys
* @Date: 2020-12-19 10:24
* @Version: 1.3.*
*/
public class Base64Util {
/**
* base64字符串转写为文件
*
* @param base64ImgData
* @param filePath
* @throws IOException
*/
public static void convertBase64DataToImage(String base64ImgData, String filePath) throws IOException {
Files.write(Paths.get(filePath), Base64.getDecoder().decode(base64ImgData), StandardOpenOption.CREATE);
}
/**
* 将文件转写为base64字符串
*
* @param filePath
* @return
* @throws IOException
*/
public static String convertImageToBase64Data(String filePath) throws IOException {
byte[] b = Files.readAllBytes(Paths.get(filePath));
return Base64.getEncoder().encodeToString(b);
}
/**
* 网络图片转换Base64的方法
*
* @param netImagePath
*/
public static String NetImageToBase64(String netImagePath) {
byte[]b= HttpRequest.get(netImagePath).execute().asBytes();
String base64 = Base64.getEncoder().encodeToString(b);
return base64;
}
/**
* 判断图片base64字符串的文件格式(base64携带 data:image/jpg;base64,)
*
* @param base64ImgData
* @return
*/
public static String checkImageBase64Format(String base64ImgData) {
String[] baseStrs = base64ImgData.split(",");
byte[] b = Base64.getDecoder().decode(baseStrs[1]);
String type = "";
if (0x424D == ((b[0] & 0xff) << 8 | (b[1] & 0xff))) {
type = "bmp";
} else if (0x8950 == ((b[0] & 0xff) << 8 | (b[1] & 0xff))) {
type = "png";
} else if (0xFFD8 == ((b[0] & 0xff) << 8 | (b[1] & 0xff))) {
type = "jpg";
}
return type;
}
/**
* base64转MultipartFile(base64携带 data:image/jpg;base64,)
* @param base64
* @return
*/
public static MultipartFile base64ToMultipart(String base64) {
String[] baseStrs = base64.split(",");
BASE64Decoder decoder = new BASE64Decoder();
byte[] b = new byte[0];
try {
b = decoder.decodeBuffer(baseStrs[1]);
} catch (IOException e) {
e.printStackTrace();
}
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {
b[i] += 256;
}
}
return new Base64DecodedMultipartFile(b, baseStrs[0]);
}
}