DisplayImage.java 2.59 KB
package fi.insomnia.intra;

import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.math.BigInteger;
import java.util.Date;

import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import sun.misc.BASE64Decoder;

import fi.insomnia.intra.db.UserImage;
import fi.insomnia.intra.helpers.OverlayImages;
import fi.insomnia.intra.utilbeans.UserImageDaoBeanLocal;

public class DisplayImage extends HttpServlet {

    private static final Logger logger = LoggerFactory.getLogger(DisplayImage.class);
    /**
     * 
     */
    private static final long serialVersionUID = -5738231939522197714L;
    @EJB
    private UserImageDaoBeanLocal userbean;

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	// PrintWriter pw = response.getWriter();
	try {
	    String rawResourcePath = request.getPathInfo();
	    logger.info("respath2 : {}", rawResourcePath);
	    String[] paths = rawResourcePath.trim().split("/");
	    logger.info("paths length: {}", paths.length);
	    boolean card = false;
	    if (paths.length >= 3 && paths[2].equals("card")) {
		card = true;

	    } else if (paths.length != 2 || paths[1].trim().isEmpty()) {
		return;
	    }

	    BigInteger picId = null;
	    try {
		picId = new BigInteger(paths[1].trim());
	    } catch (Throwable t) {
		logger.warn("Could not parse as int: {}", paths[1]);
	    }
	    logger.info("PicId2: {}", picId);
	    if (picId == null) {
		return;
	    }

	    UserImage pic = userbean.get(picId);

	    byte[] imgstream = null;
	    if (card) {
		imgstream = OverlayImages.overlay(pic);
	    } else {

		imgstream = new BASE64Decoder().decodeBuffer(new ByteArrayInputStream(pic.getImageData()));
		

	    }

	    File ofile = new File("/mnt/nas/tulostuskuvat/"+ picId +"_"+new Date().getTime() + ".png" );
	    FileOutputStream ofstream = new FileOutputStream(ofile);
	    ofstream.write(imgstream);
	    ofstream.close();
	
	//    int len = imgstream.length;

//	    byte[] rb = new byte[len];
//	    int index = imgstream.read(rb, 0, len);
//	    logger.info("index" + index);

	    response.setContentType("image/png");
	    
	    response.getOutputStream().write(imgstream, 0, imgstream.length);
	    response.getOutputStream().flush();

	} catch (Exception e) {
	    e.printStackTrace();
	}
    }
}