在做一个上传组件的时候,需要把前端传过来的 Base64 的字符串转为 CommonsMultipartFile,然后解析保存。
这里我直接使用的 apache 的 Base64 类进行转码:
public static byte[] base64ToData(String base64) {
return Base64.decodeBase64(base64.substring("data:image/png;base64,".length()));
}
这里需要注意的是,解码之前需要将 data 的格式说明截去。
然后将 Byte 数组转为 InputStream:
InputStream in = new ByteArrayInputStream(is);
然后将 InputStream 的数据,复制到临时的 temp 文件。
File temp = new File(.....);
FileUtils.copyInputStreamToFile(in, temp);
生成 FileItem :FileItem fileitem = createFileItem(file.getName());
private FileItem createFileItem(String filePath)
{
FileItemFactory factory = new DiskFileItemFactory(16, null);
FileItem item = factory.createItem("file", "image/png", true, filePath);
File newfile = new File(filePath);
int bytesRead = 0;
byte[] buffer = new byte[8192];
try
(
FileInputStream fis = new FileInputStream(newfile);
OutputStream os = item.getOutputStream();){
while ((bytesRead = fis.read(buffer, 0, 8192))
!= -1)
{
os.write(buffer, 0, bytesRead);
}
}
catch (IOException e)
{
e.printStackTrace();
}
return item;
}
CommonsMultipartFile 的构造函数可以直接通过 FileItem 生成 CommonsMultipartFile:
CommonsMultipartFile multipartFile = new CommonsMultipartFile(fileitem);
这样,就可以了。