package edu.fudan.weixin.crawler.actions; import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; import javax.imageio.ImageIO; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts2.ServletActionContext; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; import com.mongodb.BasicDBObject; import com.mongodb.DBCollection; import com.mongodb.DBObject; import edu.fudan.eservice.common.struts.GuestActionBase; import edu.fudan.eservice.common.utils.CommonUtil; import edu.fudan.eservice.common.utils.MongoUtil; import edu.fudan.eservice.common.utils.ImageHelper; @ParentPackage("servicebase") @Namespace("/crawler") public class ImageAction extends GuestActionBase { /** * */ private static final long serialVersionUID = 9120298229890720293L; private String id; private static Log log=LogFactory.getLog(ImageAction.class); @Action("imgurl") public String url() { if(!CommonUtil.isEmpty(id)) { DBCollection c=MongoUtil.getInstance().getDB().getCollection("CrawlerImages"); DBObject dbo=c.findOne(new BasicDBObject("id",id)); if(!CommonUtil.isEmpty(dbo)) { try { ServletActionContext.getResponse().getWriter().print(dbo.get("url")); } catch (IOException e) { e.printStackTrace(); } } } return NONE; } public String execute() { if(!CommonUtil.isEmpty(id)) { DBCollection c=MongoUtil.getInstance().getDB().getCollection("CrawlerImages"); DBObject dbo=c.findOne(new BasicDBObject("id",id)); if(!CommonUtil.isEmpty(dbo)) { HttpServletResponse resp=ServletActionContext.getResponse(); resp.setContentType("image/gif"); try{ byte[] bimg=null; if(!CommonUtil.isEmpty(dbo.get("image"))) { bimg=(byte[]) dbo.get("image"); }else { BufferedImage bi=ImageHelper.readImage(dbo.get("url").toString()); int width=640; double scale = (double) bi.getWidth() /width; BufferedImage to =null; if(scale>1){ int newheight = (int) (bi.getHeight() / scale); to= ImageHelper.doThumb(bi, width, newheight); }else to=bi; ByteArrayOutputStream bout=new ByteArrayOutputStream(); ImageIO.write(to, "gif", bout); bimg=bout.toByteArray(); dbo.put("image", bimg); c.save(dbo); } resp.getOutputStream().write(bimg); resp.getOutputStream().flush(); }catch(Exception e){ log.error(e); } } } return NONE; } public String getId() { return id; } public void setId(String id) { this.id = id; } }