@PostMapping("/categories")
public Object add(Category bean, MultipartFile image, HttpServletRequest request) throws Exception {
categoryService.add(bean);//调用service里的dao方法将bean存入数据库
saveOrUpdateImageFile(bean, image, request);
return bean;
}
public void saveOrUpdateImageFile(Category bean, MultipartFile image, HttpServletRequest request)
throws IOException {
File imageFolder= new File(request.getServletContext().getRealPath("img/category"));
//得到request的请求路径,在路径后面加上img/category
File file = new File(imageFolder,bean.getId()+".jpg");//创建一个file
if(!file.getParentFile().exists())
file.getParentFile().mkdirs();
image.transferTo(file);//将mutipartfile转为特定的file。
BufferedImage img = ImageUtil.change2jpg(file);
ImageIO.write(img, "jpg", file);
}
关于ImageUtil.change2jpg(file);
仅仅通过ImageIO.write(img, "jpg", file);不足以保证转换出来的jpg文件显示正常。这段转换代码(网上提供的),可以确保转换后jpg的图片显示正常,而不会出现暗红色( 有一定几率出现)。
关于ImageIO.write(img, "jpg", file);
RenderedImage接口的子类是BufferedImage,因此在这里可以直接出传入BufferedImage的实例化对象,将BufferedImage对象直接写出指定输出流
public static boolean write(RenderedImage im,String formatName,File output)
public static boolean write(RenderedImage im, String formatName,OutputStream output)
public static boolean write(RenderedImage im, String formatName,ImageOutputStream output)
例子:
使用支持给定格式的任意 ImageWriter 将一个图像写入 File
public class Test {
public static void main(String[] args) {
File out = new File("/Users/wangjue/DownLoads/1.jpg");
//将图片写入ImageIO流
try {
BufferedImage img = ImageIO.read(out);
//将图片写出到指定位置(复制图片)
OutputStream ops = new FileOutputStream(new File("/Users/wangjue/DownLoads/1(1).jpg"));
ImageIO.write(img, "jpg", ops);
} catch (IOException e) {
e.printStackTrace();
}
}
}