package server.handler;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
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.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;
import database.Query;
/**
* @author Asbjorn
*/
public class FileUploadHandler extends AbstractHandler {
private static Logger log = LogManager.getLogger( FileUploadHandler.class.getName() );
private String savePath = "C:/Users/Public/Pictures/";
private String tempFolder = "C:/Users/Public/Pictures/";
private File file ;
@Override
public void handle(String target, Request baseRequest, HttpServletRequest request,HttpServletResponse response)
throws IOException, ServletException {
if( !request.getMethod().equals( "POST" ) || !baseRequest.getUri().toString().equals( "/" ) )
return;
log.debug( request.toString() );
// if (request.getRemoteAddr() == request.getLocalAddr()){
// Method for get filepath and move on local machine
// response.setContentType("text/html");
// response.setStatus(HttpServletResponse.SC_OK);
// baseRequest.setHandled(true);
// return;
// }
if (request.getContentType() != null && request.getContentType().startsWith("multipart/form-data")) {
log.debug( "ContentType is MultiPart" );
// Check that we have a file upload request
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if( isMultipart) log.debug( "File is multipart" );
// Create a factory for disk-based file items
DiskFileItemFactory factory = new DiskFileItemFactory();
// Configure a repository (to ensure a secure temp location is used)
factory.setRepository(new File(tempFolder));
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
try{
// Parse the request to get file items.
List<FileItem> fileItems = upload.parseRequest(request);
// Process the uploaded file items
Iterator<FileItem> i = fileItems.iterator();
java.io.PrintWriter out = response.getWriter( );
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet upload</title>");
out.println("</head>");
out.println("<body>");
Query q = new Query();
while ( i.hasNext () ){
FileItem fi = (FileItem)i.next();
if ( !fi.isFormField () ){
// Get the uploaded file parameters
//String fieldName = fi.getFieldName();
String fileName = fi.getName();
//String contentType = fi.getContentType();
//boolean isInMemory = fi.isInMemory();
//long sizeInBytes = fi.getSize();
// Write the file
if( fileName.lastIndexOf("\\") >= 0 ){
file = new File( savePath +
fileName.substring( fileName.lastIndexOf("\\"))) ;
}else{
file = new File( savePath +
fileName.substring(fileName.lastIndexOf("\\")+1)) ;
}
fi.write( file ) ;
out.println("Uploaded Filename: " + fileName + "<br>");
log.debug( "Received a "+ fi.getSize() +" bytes file: "+ fileName );
q.addFiles( savePath + fileName );
}
}
q = null;
out.println("</body>");
out.println("</html>");
}catch(Exception ex) {
System.out.println(ex);
}
}
response.setContentType("text/html");
response.setStatus(HttpServletResponse.SC_OK);
baseRequest.setHandled(true);
}
}