文件转为base64文件
/**
* 通过文件生成base64文件
* @param filePath 文件
* @return String
*/
public static String createBase64ByFile(String filePath){
Base64.Encoder encoder = Base64.getEncoder();
byte[] fileBytes = null;
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream(filePath);
try {
fileBytes = new byte[inputStream.available()];
inputStream.read(fileBytes);
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (null != inputStream){
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return encoder.encodeToString(fileBytes);
}
/**
* 通过文件输入流生成base64文件
* @param inputStream 输入流
* @return String
*/
public String createBase64ByInputStream(InputStream inputStream){
Base64.Encoder encoder = Base64.getEncoder();
byte[] fileBytes = null;
ByteArrayOutputStream byteArrayOutputStream = null;
try {
byteArrayOutputStream = new ByteArrayOutputStream();
byte[] buff = new byte[100];
int rc = 0;
while ((rc = inputStream.read(buff, 0, 100)) > 0) {
byteArrayOutputStream.write(buff, 0, rc);
}
fileBytes = byteArrayOutputStream.toByteArray();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (byteArrayOutputStream != null) {
try {
byteArrayOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return encoder.encodeToString(fileBytes);
}
base64字符串转为MultipartFile文件
String baseString = (String)map.get("base64String");
// 将Base64字符串解码为字节数组
byte[] bytes = Base64.decode(baseString);
String filename = "example";
MultipartFile file = new Base64DecodedMultipartFile(bytes, filename);
编写Base64DecodedMultipartFile类实现MultipartFile 接口重写方法
package com.gremlin.config;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* @author gremlin
*/
public class Base64DecodedMultipartFile implements MultipartFile {
private final byte[] bytes;
private final String name;
private final String originalFileName;
private final String contentType;
public Base64DecodedMultipartFile(byte[] bytes, String filename) {
this.bytes = bytes;
this.name = "file";
this.originalFileName = filename;
// 这里需要根据实际情况设置文件类型
this.contentType = "application/octet-stream";
}
@Override
public String getName() {
return name;
}
@Override
public String getOriginalFilename() {
return originalFileName;
}
@Override
public String getContentType() {
return contentType;
}
@Override
public boolean isEmpty() {
return bytes == null || bytes.length == 0;
}
@Override
public long getSize() {
return bytes.length;
}
@Override
public byte[] getBytes() throws IOException {
return bytes;
}
@Override
public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(bytes);
}
@Override
public void transferTo(File file) throws IOException, IllegalStateException {
new FileOutputStream(file).write(bytes);
}
}