1. 程式人生 > >spring mvc 圖片上傳+圖片格式轉換+圖片壓縮

spring mvc 圖片上傳+圖片格式轉換+圖片壓縮

利用springmvc進行圖片處理,本例中用到了imageio和谷歌壓縮工具類Thumbnails,下面是程式碼僅供參考,如有不足之可在下方留言或者自行更正

 @RequestMapping("/uploadFile")
   @ResponseBody
   public Map<String,String> uploadFile(HttpServletRequest request,String fileName,HttpServletResponse response){
	  Map<String,String> map=new HashMap<>();
	  //將png圖片轉為jpg圖片樣式
	  BufferedImage bufferedImage;
	   //將request轉換成多部件物件
	   MultipartHttpServletRequest mh=(MultipartHttpServletRequest) request;
	   //根據檔名獲取檔案
	   CommonsMultipartFile cmf=(CommonsMultipartFile) mh.getFile(fileName);
	   //獲取檔案的上傳流
	   byte[] fbytes=cmf.getBytes();
	   //檔名稱在伺服器重複問題
	   String newFilename="";
	   SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddHHmmssSS");
	   newFilename=sdf.format(new Date());
	   Random r=new Random();
	   for(int i=0;i<3;i++) {
		   newFilename=newFilename+r.nextInt(10);
	   }
	   //獲取副檔名
	   String original=cmf.getOriginalFilename();
	   String suffix=original.substring(original.lastIndexOf("."));
	   System.out.println(suffix);
	   String[] aa= {".jpg",".png",".jpeg"};
	   List<String> list=Arrays.asList(aa);
	   if(!list.contains(suffix)) {
		   map.put("masg","上傳圖片應為jpg,jpeg,png格式");
		   return map;
	   }
	   
		String path=request.getSession().getServletContext().getRealPath("\\images\\headPhoto");
	   //String path="D:\\javadaima\\feizi\\WebRoot\\images\\headPhoto";
		newFilename=newFilename+".jpg";
		//System.out.println(path+newFilename);
		File savefile=new File(path);
		
		if(!savefile.exists()) {
			savefile.mkdirs();
		}
		//寫入檔案
		try {
			InputStream input=cmf.getInputStream();
			//輸出前將png轉為jpg
			if(suffix.equals(".jpg")) {
      	    Thumbnails.of(input).scale(1f).outputQuality(0.3f).toFile(path+"\\"+newFilename);
			}else {
				
				bufferedImage=ImageIO.read(input);
				BufferedImage newbuffimage=new BufferedImage(bufferedImage.getWidth(),bufferedImage.getHeight(),bufferedImage.TYPE_INT_RGB);
				newbuffimage.createGraphics().drawImage(bufferedImage, 0, 0, Color.WHITE,null);
				Thumbnails.of(newbuffimage).scale(1f).outputQuality(0.3f).toFile(path+"\\"+newFilename);
			}
			//FileOutputStream out=new FileOutputStream(path+"\\"+newFilename);
			//out.write(fbytes);
			//out.flush();
			//out.close();
			input.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	   
		map.put("fullimgurl","images/headPhoto/"+newFilename);
	return map;
	   
   }