Code Bye

servlet里压缩处理图片有问

这个servlet是接收手机端的图片,然后对图片处理,达到质量小(图片大小),不变形保持原来上传的原样!上传的图片是Jpg格式的,还要把图片处理为Png格式,图片名的后缀改为png之外,前缀不变!本人现在用的是这个方法:但是app端上传成功后,服务器这边打不到图片,
public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		try {
			// Create a factory for disk-based file items
			DiskFileItemFactory factory = new DiskFileItemFactory();
			// Set factory constraints
			factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb
			factory.setRepository(tempPathFile);// 设置缓冲区目录
			// Create a new file upload handler
			ServletFileUpload upload = new ServletFileUpload(factory);
			upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB
			List<FileItem> items = upload.parseRequest(request);// 得到全部的文件
			Iterator<FileItem> i = items.iterator();
			while (i.hasNext()) {
				FileItem fi = (FileItem) i.next();
				String fileName = fi.getName();
				if (fileName != null) {
					File fullFile = new File(fi.getName());
					 File savedFile = new File(uploadPath, fullFile.getName());
					InputStream is = new FileInputStream(fileName);
					BufferedImage buff = ImageIO.read(is);
					BufferedImage bi = ImageIO.read(fullFile);
					Image mImage = bi.getScaledInstance(buff.getWidth(),buff.getHeight(), Image.SCALE_DEFAULT);
					 BufferedImage tag = new BufferedImage(buff.getWidth(), buff.getHeight(), BufferedImage.TYPE_INT_RGB);
					 Graphics g = tag.getGraphics();
					 g.drawImage(mImage, 0, 0, null);
					 g.dispose();
					 is.close();
					 ImageIO.write(tag, "png", new FileOutputStream(savedFile));
//					fi.write(savedFile);
//					FileOutputStream out = new FileOutputStream(outputDir + outputFileName);  
//	                // JPEGImageEncoder可适用于其他图片类型的转换   
//	                JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);   
//	                encoder.encode(tag);   
//	                out.close(); 
				}
			}
			System.out.print("upload succeed");
		} catch (Exception e) {
			System.out.println(e.getMessage());

			// 可以跳转出错页面
			e.printStackTrace();
		}
	}
解决方案

40

if语句修改为
                     File savedFile = new File(uploadPath, fi.getName());
                    InputStream is =  fi.getInputStream();
                    BufferedImage buff = ImageIO.read(is);
                    Image mImage = buff.getScaledInstance(buff.getWidth(),buff.getHeight(), Image.SCALE_DEFAULT);

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明servlet里压缩处理图片有问