/*
* UploadServlet.java
*
* Created on July 12, 2006, 12:30 PM
*/
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.jms.BytesMessage;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUpload;
import org.apache.commons.fileupload.FileUploadException;
/**
*
* @author jungi
* @version
*/
public class UploadServlet extends HttpServlet {
private static final long MAX_SIZE = 300000;
/** Processes requests for both HTTP GET and POST methods.
* @param request servlet request
* @param response servlet response
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("");
out.println("
");
out.println("Servlet UploadServlet");
out.println("");
out.println("");
out.println("Servlet UploadServlet at " + request.getContextPath() + "
");
if (FileUpload.isMultipartContent(request)) {
try {
processFiles(request);
out.println("File is OK.");
} catch (Exception ex) {
print2Log("FileUpload error: " + ex.getMessage());
errorOut(request,response,ex.getMessage());
}
} else {
out.println("Your request doesn't include MultipartConent");
}
out.println("");
out.println("");
out.close();
}
//
/** Handles the HTTP GET method.
* @param request servlet request
* @param response servlet response
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/** Handles the HTTP POST method.
* @param request servlet request
* @param response servlet response
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/** Returns a short description of the servlet.
*/
public String getServletInfo() {
return "Short description";
}
//
private void processFiles(HttpServletRequest request) throws FileUploadException, IOException,
NamingException, JMSException {
String eMail = null;
byte[] data = null;
print2Log("Get request with MultiPartContents, size: " + request.getContentLength());
DiskFileUpload upload = new DiskFileUpload();
List /* FileItem */ fileItems = upload.parseRequest(request, 10000, MAX_SIZE,
System.getProperty("java.io.tmpdir"));
Iterator it = fileItems.iterator();
while (it.hasNext()) {
FileItem item = (FileItem)it.next();
if (item.isFormField()) {
// read e-mail
if (item.getFieldName().equals("e-mail")) {
eMail = item.getString();
}
} else {
// check file size
if (item.getSize() == 0) {
throw new FileUploadException("File " + item.getName() + " has is 0 B size");
}
// only png images support
if (!item.getContentType().equals("image/png")) {
throw new FileUploadException("Only image/png support.");
}
data = new byte[new Long(item.getSize()).intValue()];
data = item.get();
}
}
// send JMS message
sendJMSMessageToPhotoArchiveDestination(data, eMail);
print2Log("Sending message with e-mail: " + eMail + " and size " + data.length);
}
private Message createJMSMessageForPhotoArchiveDestination(Session session, byte[] messageData, String eMail) throws JMSException {
// TODO create and populate message to send
// javax.jms.TextMessage tm = session.createTextMessage();
// tm.setText(messageData.toString());
// return tm;
BytesMessage tm = session.createBytesMessage();
tm.setStringProperty("email", eMail);
tm.writeBytes(messageData);
return tm;
}
private void sendJMSMessageToPhotoArchiveDestination(byte[] messageData, String eMail) throws NamingException, JMSException {
javax.naming.Context c = new javax.naming.InitialContext();
javax.jms.ConnectionFactory cf = (javax.jms.ConnectionFactory) c.lookup("java:comp/env/jms/PhotoArchiveDestinationFactory");
javax.jms.Connection conn = null;
javax.jms.Session s = null;
try {
conn = cf.createConnection();
s = conn.createSession(false,s.AUTO_ACKNOWLEDGE);
javax.jms.Destination destination = (javax.jms.Destination) c.lookup("java:comp/env/jms/PhotoArchiveDestination");
javax.jms.MessageProducer mp = s.createProducer(destination);
mp.send(createJMSMessageForPhotoArchiveDestination(s,messageData, eMail));
} finally {
if (s != null) {
s.close();
}
if (conn != null) {
conn.close();
}
}
}
private static final void print2Log(String msg){
Logger.getLogger("UploadServlet").log(Level.INFO,msg);
}
private void errorOut(HttpServletRequest request, HttpServletResponse response, String message) throws
ServletException, IOException {
request.getRequestDispatcher("error.jsp?message=" + message).forward(request,response);
}
}