业务:用户上传一张图片到文件站,需要返回原图url和缩略图url
处理思路:
- 因为上传图片方法返回url是单个上传,第一步先上传原图并返回url
- 处理缩略图并上传:拿到MultipartFile压缩成缩略图后存放到项目内指定文件夹
- 用项目内新生成的缩略图转换为MultipartFile发送给图片上传方法得到url
- 流程处理完后删除存放在项目内的缩略图
public void imageMethod(MultipartFile file){ //region/-------创建缩略图存放的文件夹-------/
//获得项目根目录
String path = System.getProperty("user.dir");
//定义新文件夹路径
String dirPath = path + File.separator + "imagecache";
//根据路径生成文件夹
File dir = new File(dirPath);
dir.mkdirs();
//endregion //定义缩略图的全路径
String fileSuffix = "image.jpg";
String contextPath = dirPath + File.separator + fileSuffix; //压缩图片
MultipartFile newFile = null;
try {
//自定义宽高压缩(压缩方法很多,可以根据需求更改)
Thumbnails.of(file.getInputStream()).forceSize(100, 100).toFile(contextPath); //压缩完成后将缩略图生成MultipartFile
FileItem fileItem = createFileItem(contextPath);
newFile = new CommonsMultipartFile(fileItem); } catch (IOException e) {
e.printStackTrace();
}
//endregion //上面的“newFile”就是缩略图转换后的MultipartFile,就可以拿来用了 //程序处理完后把生成的缩略图删除
File image = new File(contextPath);
if (image.exists()) {
image.delete();
} } /**
* 获取压缩后的图片,File 转为 MultipartFile
*
*/
public FileItem createFileItem(String contextPath) {
{
FileItemFactory factory = new DiskFileItemFactory(16, null);
String textFieldName = "textField";
int num = contextPath.lastIndexOf(".");
String extFile = contextPath.substring(num);
FileItem item = factory.createItem(textFieldName, "text/plain", true,
"MyFileName" + extFile);
File newfile = new File(contextPath);
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);
}
os.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
return item;
}
}