Thumbnails本地文件压缩及MultipartFile类型文件压缩后转MultipartFile[转载]
本地文件压缩
MultipartFile类型文件压缩后转MultipartFile
1.添加pom依赖
<dependency>
<groupId>net.coobird</groupId>
<artifactId>thumbnailator</artifactId>
<version>0.4.9</version>
</dependency>
2.代码 MultipartFile file
public static String saveFileWithoutWaterMark(MultipartFile file, String rootPath, String relativeParentPath) {
try {
// 获取文件名
String fileName = file.getOriginalFilename();
// 文件名不为空时上传
if (!org.springframework.util.StringUtils.isEmpty(fileName)) {
final IdentifierGenerator generator = new IdentifierGenerator();
final String uri = relativeParentPath + generator.nextStringIdentifier() + "."
+ getFileExtension(fileName).toLowerCase();
final String fileFullPath = rootPath + uri;
// 拿到文件后缀名
String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);
/**
* 以下内容开始压缩图片
* 判断是否是图片
* 判断是否超过了 100K
*/
if(isPicture(suffix) && (1024 * 1024 * 0.1) <= file.getSize() ){
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
// 小于 1M 的
if ((1024 * 1024 * 0.1) <= file.getSize() && file.getSize() <= (1024 * 1024)) {
Thumbnails.of(file.getInputStream()).scale(1f).outputQuality(0.3f).toOutputStream(outputStream);
}
// 1 - 2M 的
else if((1024 * 1024) < file.getSize() && file.getSize() <= (1024 * 1024 * 2)){
Thumbnails.of(file.getInputStream()).scale(1f).outputQuality(0.2f).toOutputStream(outputStream);
}// 2M 以上的
else if ((1024 * 1024 * 2) < file.getSize()) {
Thumbnails.of(file.getInputStream()).scale(1f).outputQuality(0.1f).toOutputStream(outputStream);
}
byte[] bytes = outputStream.toByteArray();
InputStream inputStream = new ByteArrayInputStream(bytes);
// 转换城新的 MultipartFile 对象
MultipartFile mfileInfos = new MockMultipartFile(file.getOriginalFilename(), file.getOriginalFilename(), file.getContentType(), inputStream);
System.out.println("源文件大小:"+file.getSize()+"压缩后的大小:"+mfileInfos.getSize());
//-- 压缩结束 上传压缩后的文件
minioUploadFile(mfileInfos, fileFullPath);
}else{
minioUploadFile(file, fileFullPath);
}
return cleanPath(uri);
}
} catch (IOException e) {
e.printStackTrace();
}
return "";
}
原文地址 : https://www.cnblogs.com/xingqiang/p/13955557.html