我用的是java11版本
工具类网上很多,我参考的是一个博主的,但是我写这篇文章的时候关网页,有问题可以私信
废话不多说直接上代码
Base64转MultipartFile工具
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Base64;
@Slf4j
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 {
FileOutputStream out = null;
try {
out = new FileOutputStream(dest);
out.write(imgContent);
out.close();
} catch (Exception e) {
log.error("transferTos:{}",e);
}finally {
if(null!=out) {
try{
out.flush();
}catch(Exception e){
}
try{
out.close();
}catch(Exception e){
}
}
}
}
public static MultipartFile base64ToMultipart(String base64) {
try {
String[] baseStrs = base64.split(",");
byte[] b;
log.info("**baseStrs长度:"+baseStrs.length+ "***base64ToMultipart信息:"+baseStrs);
b = Base64.getDecoder().decode(baseStrs[1]);
log.info("byte[]--b信息:"+b);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {
b[i] += 256;
}
}
return new Base64DecodedMultipartFile(b, baseStrs[0]);
} catch (Exception e) {
log.error("transferTo:{}",e);
return null;
}
}
/**
* 文件转base64字符串
* @param filePath
* @return
*/
public static String encryptToBase64(String filePath) {
if (filePath == null) {
return null;
}
try {
byte[] b = Files.readAllBytes(Paths.get(filePath));
return org.apache.commons.codec.binary.Base64.encodeBase64String(b);
} catch (IOException e) {
log.error("encryptToBase64:{}",e);
}
return null;
}
}
Controller
@PostMapping(value = "/fileUpload")
@ApiOperation(value = "base64上传文件", notes = "base64上传文件,Map方式接收", httpMethod = "POST")
@ApiImplicitParams({
@ApiImplicitParam(name = "attachContent", value = "编码后的base64信息", required = true, paramType = "query"),
@ApiImplicitParam(name = "attachType", value = "文件类型 01图片 02语音 03视频", required = true, paramType = "query"),
})
public Result frontIdUpload(@RequestBody Map<String,Object> params) throws IOException {
if (params == null || StringUtils.isBlank((String) params.get("attachContent"))){
return Result.fail("参数缺失");
}
String attachContent = params.get("attachContent").toString();
String attachType = StringUtils.isBlank((String) params.get("attachType")) ? null : params.get("attachType").toString();
FileDTO uploadFileByBase64Dto = new FileDTO();
uploadFileByBase64Dto.setAttachContent(attachContent);
uploadFileByBase64Dto.setAttachType(attachType);
return userService.xxxxUpload(uploadFileByBase64Dto);
}
FileDTO
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class FileDTO {
@ApiModelProperty("编码后的base64信息")
String attachContent;
@ApiModelProperty("文件类型 01图片 02语音 03视频")
String attachType;
}
使用工具类将base64转为MultipartFile
Base64DecodedMultipartFile.base64ToMultipart(uploadFileByBase64Dto.getAttachContent())
转为file文件后改怎么处理就看个人业务了