/**
*
*/
package server.handler;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;
import org.eclipse.jetty.server.handler.ContextHandler;
import database.Query;
/**
* @author andreas
*
*/
public class GetImageHandler extends ContextHandler {
private static Logger log = LogManager.getLogger( GetImageHandler.class.getName() );
//constructor
public GetImageHandler( String context ) {
super();
this.setContextPath( context );
this.setHandler( new innerHandler() );
}
private class innerHandler extends AbstractHandler {
@Override
public void handle(String target, Request baseRequest,
HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
log.debug( baseRequest.getUri() );
String imageExtension = null;
int fileId = 0;
byte[] b = null;
//hente fil id fra requesten mottat
String img_id = request.getParameter( "img_id" );
try {
fileId = Integer.parseInt( img_id );
log.debug( "parse fileId success! result: " + fileId );
} catch (NumberFormatException e) {
log.warn( "{\"error\":\"image id "+ img_id +" is not an integer.\"}" );
return;
}
//henter filen ved hjelp av databasen
Query q = new Query();
File image = q.getFile( fileId );
q = null;
if( image == null ) {
log.warn( "Can't get file from database!" );
return;
}
//bytearray for å holde bildet
b = new byte[(int)image.length()];
//henter imagepath og filextension
String imagePath = image.getPath();
imageExtension = imagePath.substring( imagePath.lastIndexOf( '.' ) + 1 );
FileInputStream input = new FileInputStream(image);
int antallSkrevet = input.read(b);
//lager header
response.setContentType("image/"+ imageExtension);
response.setStatus(HttpServletResponse.SC_OK);
baseRequest.setHandled(true);
//henter og skriver til responsen(tømmer buffer) og lukker streams
ServletOutputStream os = response.getOutputStream();
os.write(b);
os.flush();
input.close();
log.debug( "skrev " + antallSkrevet + " bytes av: "+ imagePath );
}
}
}