GetUserIconOpreate.jsp 8.9 KB
<%@page import="weaver.file.AESCoder"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ page import="weaver.file.FileUpload,weaver.file.Prop"%>
<%@ page import="weaver.general.*"%>
<%@ page import="weaver.hrm.*"%>
<%@ page import="java.util.*"%>
<%@ page import="com.sun.image.codec.jpeg.*"%>
<%@ page import="java.awt.*"%>
<%@ page import="java.awt.geom.Rectangle2D"%>
<%@ page import="java.awt.image.*"%>
<%@ page import="java.io.*"%>
<%@ page import="javax.imageio.ImageIO"%>
<%@ page import="org.apache.commons.fileupload.*"%>
<%@ page import="java.util.zip.ZipInputStream"%>
<%@page import="weaver.systeminfo.SystemEnv"%>
<%@page import="weaver.hrm.resource.ResourceComInfo"%>
<%@ page import="weaver.conn.RecordSet" %>
<%@page import="weaver.security.util.SecurityMethodUtil"%>
<jsp:useBean id="rs" class="weaver.conn.RecordSet" scope="page"/>



<%
	User user = HrmUserVarify.getUser(request, response);
	if (user == null) return;
	if(true) return;//E9 该文件已不再使用,由于安全原因,作废

	String mode=Prop.getPropValue(GCONST.getConfigFile() , "authentic");
	String temploginid = Util.null2String(request.getParameter("temploginid"));
	String trmphomepage = Util.null2String(request.getParameter("trmphomepage"));
	String uploadPath = GCONST.getRootPath() + "messager"
			+ File.separatorChar + "usericon";
	String tempPath = uploadPath + File.separatorChar + "Temp";
	//自动创建目录:
	if (!new File(uploadPath).isDirectory())
		new File(uploadPath).mkdirs();
	if (!new File(tempPath).isDirectory())
		new File(tempPath).mkdirs();
	String method = "";
	String userId = "";
	String isManager = "";
	String loginid = "";
	int x1 = 0;
	int y1 = 0;
	int x2 = 0;
	int y2 = 0;
  int formatWidth = 0;
  int formatHeight = 0;
	String requestFrom="";
	
	int imagefileid=0;
	DiskFileUpload fu = new DiskFileUpload();
	fu.setSizeMax(4194304); //4MB
	fu.setSizeThreshold(4096); //缓冲区大小4kb
	fu.setRepositoryPath(tempPath);

	java.util.List fileItems = null ;
	try{
		fileItems = fu.parseRequest(request);
	}catch(FileUploadBase.SizeLimitExceededException e){
		 out.println("<script>window.top.Dialog.alert('"+SystemEnv.getHtmlLabelNames("20001,127328",user.getLanguage())+" 4MB!',function(){window.parent.location.reload() ;});</script>");
         return;
	}
	Iterator ite = fileItems.iterator();

	//BufferedInputStream imagefile=null;
	try {
		while (ite.hasNext()) {
			FileItem item = (FileItem) ite.next();
			if (!item.isFormField()) {
				String name = item.getName();
				if(Util.isExcuteFile(name)) continue;
				long size = item.getSize();
				if ((name == null || name.equals("")) || size == 0)
					continue;
				
				//imagefile = new BufferedInputStream(item.getInputStream());
			} else {
				String itemValue = SecurityMethodUtil.textXssClean(item.getString("UTF-8")) ;
				
				if (item.getFieldName().equals("method"))
					method = Util.null2String(itemValue);
				if (item.getFieldName().equals("userId"))
					userId = Util.null2String(""+Util.getIntValue(itemValue));
				if (item.getFieldName().equals("isManager"))
					isManager = Util.null2String(""+Util.getIntValue(itemValue));
				if (item.getFieldName().equals("loginid"))
					loginid = Util.null2String(itemValue);
				if (item.getFieldName().equals("x1"))
					x1 = Util.getIntValue(itemValue);
				if (item.getFieldName().equals("y1"))
					y1 = Util.getIntValue(itemValue);
				if (item.getFieldName().equals("x2"))
					x2 = Util.getIntValue(itemValue);
				if (item.getFieldName().equals("y2"))
					y2 = Util.getIntValue(itemValue);	
				if (item.getFieldName().equals("formatHeight"))
					formatHeight = Util.getIntValue(itemValue);
				if (item.getFieldName().equals("formatWidth"))
					formatWidth = Util.getIntValue(itemValue);
				if (item.getFieldName().equals("imagefileid"))
					imagefileid = Util.getIntValue(itemValue);		
				if (item.getFieldName().equals("requestFrom"))
					requestFrom = Util.null2String(itemValue);
				
				if(!requestFrom.matches("^[a-zA-Z0-9_]*$")){
						requestFrom = "";
				}

			}
		}
	} catch (Exception e) {
		new BaseBean().writeLog(e) ;
		out.println("<script>window.top.Dialog.alert('"+SystemEnv.getHtmlLabelNames("26048",user.getLanguage())+"',function(){window.parent.location.reload() ;});</script>");
		return ;
	}
	if(!"1".equals(isManager)){
		userId = ""+user.getUID();
	}
	
	if ("delete".equals(method)) {
		String strSql="update hrmresource set messagerurl='' where id="+userId;		
		rs.executeSql(strSql);
		ResourceComInfo resourceComInfo=new ResourceComInfo();
		resourceComInfo.updateResourceInfoCache(userId);

		out.println("<script>window.location='GetUserIcon.jsp?loginid="+loginid+"&isclosed=true&requestFrom="+requestFrom+"&iconUrl="+resourceComInfo.getMessagerUrls(userId)+"'</script>");
		
	}
	
	if ("usericon".equals(method)) {
	try{
		//String iconName="loginid"+TimeUtil.getFormartString(Calendar.getInstance(),"yyyyMMddHHmmss")+".jpg";
		UUID uuid  =  UUID.randomUUID();
		String iconName = uuid.toString().replaceAll("-", "") + ".jpg";
		//生成缩略图		
		String targetUrl = uploadPath+ File.separatorChar +iconName;
		
		rs.executeSql("select isaesencrypt,aescode,filerealpath,iszip from imagefile where imagefileid="+imagefileid);
		rs.next();
		String filerealpath=Util.null2String(rs.getString("filerealpath"));  
        String iszip=Util.null2String(rs.getString("iszip"));
        String isaesencrypt = Util.null2String(rs.getString("isaesencrypt"));
        String aescode = Util.null2String(rs.getString("aescode"));
        InputStream imagefile = null;
        
        if(filerealpath==null || filerealpath.equals("")){
            out.println("<script>window.location='GetUserIcon.jsp?loginid="+temploginid+"&requestFrom="+trmphomepage+"'</script>");
            return;
          }
        
        
        File thefile = new File(filerealpath);
        if (iszip.equals("1")) {
          ZipInputStream zin = new ZipInputStream(new FileInputStream(thefile));
          if (zin.getNextEntry() != null) imagefile = new BufferedInputStream(zin);
        } else {
          imagefile = new BufferedInputStream(new FileInputStream(thefile));
        }
        if(isaesencrypt.equals("1")){
        	imagefile = AESCoder.decrypt(imagefile,aescode);
        }
         Image image = ImageIO.read(imagefile);

         if(formatWidth>477||formatHeight>287){ }
	         //创建一个BufferedImage  477px;height:287px
	         BufferedImage bufimage = new BufferedImage(formatWidth,formatHeight,BufferedImage.TYPE_3BYTE_BGR);
	       	 //把图片读到bufferedImage中
	
	         bufimage.getGraphics().drawImage(image,0,0, formatWidth, formatHeight, null);
	         //得到转换后的Image图片
	         image = bufimage;
        
         
         imagefile.close();
         
		//Image image = ImageIO.read(imagefile);
		//imagefile.close();

		
		int width = x2 - x1;
		int height = y2 - y1;
		if(width<=0)width=100;
		if(height<=0)height=100;
		BufferedImage thumbImage = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_RGB);
		int[] data = new int[width * height];
		int i = 0;
		for (int y = 0; y < height; y++) {
			for (int x = 0; x < width; x++) {
				data[i++] = 0xffffffff;
			}
		}
		thumbImage.setRGB(0, 0, width, height, data, 0, width);
		Graphics2D graphics2D = thumbImage.createGraphics();
		graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
				RenderingHints.VALUE_INTERPOLATION_BILINEAR);

		graphics2D.drawImage(image, 0, 0, width, height, x1, y1, x2,
				y2, Color.white, null);

		BufferedOutputStream out2 = new BufferedOutputStream(
				new FileOutputStream(targetUrl));
		JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out2);
		JPEGEncodeParam param = encoder
				.getDefaultJPEGEncodeParam(thumbImage);
		int quality = 80;
		quality = Math.max(0, Math.min(quality, 100));
		param.setQuality((float) quality / 100.0f, false);
		encoder.setJPEGEncodeParam(param);
		encoder.encode(thumbImage);
		out2.close();

		//保存进数据库
		//String whereSql = "and loginid='"+loginid+"'";
		//loginid、account字段整合  qc:128484
		//if(mode.equals("ldap")) whereSql = "and account='"+loginid+"'";
		//if(mode.equals("ldap")) whereSql = "and loginid='"+loginid+"'";
		saveOrUpdateImg(rs, iconName, userId);
		ResourceComInfo resourceComInfo=new ResourceComInfo();
		resourceComInfo.updateResourceInfoCache(userId);
		out.println("<script>window.location='GetUserIcon.jsp?isManager="+isManager+"&loginid="+loginid+"&isclosed=true&requestFrom="+requestFrom+"&iconUrl=/messager/usericon/"+iconName+"'</script>");
		}catch(Exception e){
			//如果日志报错javax.imageio.IIOException: Unsupported Image Type,应该是上传的这个图片经过ps处理改变了模式了,用画图工具另存为就可以了
			rs.writeLog("GetUserIconOpreate>Exception:"+e.getMessage());
		}
	}
%>

<%!
	public synchronized void saveOrUpdateImg(RecordSet rs, String iconName, String userId) {
		String strSql="update hrmresource set messagerurl='/messager/usericon/"+iconName+"' where id="+userId;
		rs.executeSql(strSql);
	}
%>