package com.mandi.servlet;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.mandi.common.Jacksonmethod;
import com.mandi.common.RequestParam;
import com.mandi.servlet.file.FileLoad;
import com.mandi.servlet.file.impl.FileLoadImpl;

/** 
 * @author mengly 
 * @version 创建时间:2015年9月25日 下午5:09:08 
 * 类说明 
 */

public class Imageuploadservlet  extends HttpServlet {
	private Logger log=Logger.getLogger(Imageuploadservlet.class);
	private static final long serialVersionUID = 1L;
   /**
    * cop:lt,gt,eq
    */
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		ApplicationContext a=WebApplicationContextUtils.getWebApplicationContext(req.getServletContext());
		if(a==null)
			return;
		DiskFileItemFactory dfif=new DiskFileItemFactory(); 
		ServletFileUpload  sf=new ServletFileUpload(dfif);
		sf.setHeaderEncoding("utf-8");
		List<FileItem> list=null;
		
		String path1=req.getParameter("path");
		int width=RequestParam.getInt(req, "width");
		int height=RequestParam.getInt(req, "height");
		String cop=RequestParam.getString(req, "cop");
		int size=RequestParam.getInt(req, "size");
		FileItem tfi=null;
		Map<String, Object> tf=null;
		try{
			list=sf.parseRequest(req);
			Iterator<FileItem> it=list.iterator();
			while(it.hasNext())
			{
				FileItem fi=it.next();
				if(fi.isFormField())
				{
					String pname=fi.getFieldName();
					String pvalue=fi.getString();
					try{
						if("path".equals(pname))
						{
							path1=pvalue;
						}
						if("width".equals(pname))
						{
							width=Integer.valueOf(pvalue);
						}
						if("height".equals(pname))
						{
							height=Integer.valueOf(pvalue);
						}
						if("cop".equals(pname))
						{
							cop=pvalue;
						}
						if("size".equals(pname))
						{
							size=Integer.valueOf(pvalue);
						}
					}catch(Exception e1){log.info("转换错误!");}
				}else{
					tfi=fi;
				}
			}
		}catch(Exception e){
			log.info(e.getMessage());
		}
		if(path1==null||path1.isEmpty())
			path1="/temp";
		String	path=req.getServletContext().getRealPath(path1);
		File dir=new File(path);
		if(!dir.exists()||!dir.isDirectory())
			dir.mkdirs();
		FileLoad fl=a.getBean(FileLoadImpl.class);
		tf=fl.uploadFile_map(path1, req, tfi, true, size);
		
		
		resp.setCharacterEncoding("UTF-8");
		resp.setContentType("application/json; charset=utf-8");
		JsonObject jo=new JsonObject();
		Gson g=new Gson();
		if(tf!=null)
		{
			String furl=tf.get("url")+"";
			furl=req.getServletContext().getRealPath(furl);
			log.info("furl:"+furl);
			
			if(cop!=null&&!cop.isEmpty()&&width>0&&height>0)
			{
				//检查图片像素
				try {
					//BufferedImage bi=Sanselan.getBufferedImage(new File(furl));
					BufferedImage bi=ImageIO.read(new File(furl));
					int rwidth=bi.getWidth();
					int rheight=bi.getHeight();
					if("lt".equals(cop))
					{
						if(width<rwidth||height<rheight)
						{
							jo.addProperty("code", 1);
							jo.addProperty("errmsg", "上传的图片分辨率大于特定的宽度和高度::"+width+"*"+height);
							resp.getWriter().write(g.toJson(jo));
							return;
						}
					}else if("gt".equals(cop))
					{
						if(width>rwidth||height>rheight)
						{
							jo.addProperty("code", 1);
							jo.addProperty("errmsg", "上传的图片分辨率小于特定的宽度和高度::"+width+"*"+height);
							resp.getWriter().write(g.toJson(jo));
							return;
						}
					}else if("eq".equals(cop))
					{
						if(width!=rwidth||height!=rheight)
						{
							jo.addProperty("code", 1);
							jo.addProperty("errmsg", "上传的图片分辨率不等于特定的宽度和高度::"+width+"*"+height);
							resp.getWriter().write(g.toJson(jo));
							return;
						}
					}else{
						jo.addProperty("code", 1);
						jo.addProperty("errmsg", "系统无法判断您要如何判断图片分辨率!!");
						resp.getWriter().write(g.toJson(jo));
						return;
					}
					
				} catch (Exception e) {
					e.printStackTrace();
					jo.addProperty("code", 1);
					jo.addProperty("errmsg", "上传的图片不能正常打开,请检查!!");
					resp.getWriter().write(g.toJson(jo));
					return;
				}
			}
			resp.getWriter().write(Jacksonmethod.tojson(tf, false));
		}else{
			jo.addProperty("code", 1);
			jo.addProperty("errmsg", "你上传的图片不符合规则不能保存!");
			resp.getWriter().write(g.toJson(jo));
			return;
		}
	}	
}