qq网站在线登录网页版,上海建设摩托车官网报价,搜索引擎优化的基本方法,宁波电子商务网站建设使用Thumbnailator工具完成对图片进行裁剪、缩放的处理#xff1a;
Thumbnails.of(file.getInputStream()).size(width, height).keepAspectRatio(false).toOutputStream(outputStream);
如果前端传入的是webp格式或者二进制文件#xff0c;该文件中存储内容为将图片转成ba…使用Thumbnailator工具完成对图片进行裁剪、缩放的处理
Thumbnails.of(file.getInputStream()).size(width, height).keepAspectRatio(false).toOutputStream(outputStream);
如果前端传入的是webp格式或者二进制文件该文件中存储内容为将图片转成base64格式的字符串部分内容如下
data:image/jpeg;base64,
iVBORw0KGgoAAAANSUhEUgAAAfUAAAH1CAYAAADvSGcRAAAAAXNSR0IArs4c6QAAAARnQU1BAACx
jwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAPlSURBVHhetP3n927HsSf24ZKXOQcQBAkCIIic
c84555zTQc45HIRzkHMGiECQBC95Ge4lb5oZjUbyWNLSkrwsjzRjW7I9WsrWkkZakiz9Ae36fGv3
8zuc8fIbL7/otfezd/u6uqqlZV997PZt/dYdx5Q7
会抛出异常net.coobird.thumbnailator.tasks.UnsupportedFormatException: No suitable ImageReader found for source data.
原因是没有对应的图片解析器处理那么解决办法有引入第三方依赖
dependencygroupIdorg.sejda.imageio/groupIdartifactIdwebp-imageio/artifactIdversion0.1.6/version
/dependency
引入依赖后可能会解决第一种webp的问题第二种问题依然无法解决所以往往最普通的办法就是最使用的办法这里通过最原始的流获取字节数组将该字节数组读出到输出流并转换成字符串就是该二进制文件中所有的内容即与原部分数据一致。
public String ImageFileToBase64(MultipartFile multipartFile){String content;try {InputStream inputStream multipartFile.getInputStream();//1创建字节数组输出流用来输出读取到的内容ByteArrayOutputStream baos new ByteArrayOutputStream();//2创建缓存大小byte[] buffer new byte[1024]; // 1KB//每次读取到内容的长度int len -1;//3开始读取输入流中的内容while ((len inputStream.read(buffer)) ! -1) { //当等于-1说明没有数据可以读取了baos.write(buffer, 0, len); //把读取到的内容写到输出流中}//4 把字节数组转换为字符串content baos.toString();//5关闭输入流和输出流inputStream.close();baos.close();}catch (Exception e){log.error(文件解析错误,e);throw new BusinessException(ErrorCode.SYSTEM_ERROR);}//6返回字符串结果return content;
}
再将data:image/jpeg;base64,过滤掉
通过java原生的Base64.getDecoder().decode()转换成字节数组的形式
最后再使用new MockMultipartFile(),将字节数组转化为MultipartFile对象。
问题得以解决。其中contentType从data:image/jpeg;base64,中截取image/jpeg。
String base64 imageUtils.ImageFileToBase64(thumbnailFile);
String[] parts base64.split(,);
String contentType parts[0].split(;)[0].split(:)[1];
byte[] bytes Base64.getDecoder().decode(parts[1]);
MultipartFile newThumbnailFile new MockMultipartFile(thumbnailFile.getOriginalFilename(), thumbnailFile.getOriginalFilename(), contentType, bytes);后续使用newThumbnailFile进行对文件的处理即可。