package org.inbio.m3s.gwt.server.servlets; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.inbio.m3s.config.Properties; import org.inbio.m3s.gwt.client.config.ClientProperties; /** * * @author jgutierrez * @version */ public class FileUploadManager extends HttpServlet { /** * */ private static final long serialVersionUID = -3683098268355992943L; /** * Processes requests for both HTTP <code>GET</code> and <code>POST</code> * 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(); /* * TODO output your page here out.println("<html>"); out.println("<head>"); * out.println("<title>Servlet FileUploadManager</title>"); * out.println("</head>"); out.println("<body>"); out.println("<h1>Servlet * FileUploadManager at " + request.getContextPath () + "</h1>"); * out.println("</body>"); out.println("</html>"); */ out.close(); } /** * Handles the file Upload from the client * * @param request * servlet request * @param response * servlet response */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Creates a new HttpSession so the other servlets could identify // the file that has been upload HttpSession session = request.getSession(true); boolean multipartContent = ServletFileUpload .isMultipartContent(request); // Check that we have a file upload request boolean isMultipart = multipartContent; response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String fileId = ""; String fileName = ""; File cfile = null; DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd-HHmmss-"); java.util.Date date = new java.util.Date(); // Create a factory for disk-based file items if (isMultipart) { FileItemFactory factory = new DiskFileItemFactory(); // Create a new file upload handler ServletFileUpload upload = new ServletFileUpload(factory); // Parse the request try { List items = upload.parseRequest(request); // Process the uploaded items Iterator iter = items.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (item.isFormField() == false) { cfile = new File(item.getName()); fileName = cfile.getName(); fileName = fileName.replace(' ', '-'); fileName = fileName.replace('\\', '-'); fileName = fileName.replace('/', '-'); fileName = fileName.replace(':', '-'); fileId = dateFormat.format(date) + session.getId() + fileName; File tosave = new File(Properties.REAL_TEMP_FILES_DIR + fileId); try { item.write(tosave); } catch (Exception ex) { ex.printStackTrace(); out .print(ClientProperties.ERROR + ".No se pudo guardar el archivo en el servidor"); out.close(); } } } out.print(ClientProperties.OK + "." + fileId); } catch (FileUploadException e) { e.printStackTrace(); out .print(ClientProperties.ERROR + ".No se encontro el archivo"); System.out.println("ERRROR EXCEPCION VOLO: "); } } else { System.out.println("isMultipartContent = false"); } out.close(); } /** * Returns a short description of the servlet. */ public String getServletInfo() { return "File upload servlet"; } // </editor-fold> /** * Handles write on disk of the upload file, makes an unique name for the * uploaded file which is made of the sessionID + Name of the upload File. * * @param fileItem: * that represents the file to write * @param sessionID: * in orden to make an unique name for the file * @return true on success, false otherwise. * @deprecated */ // private boolean processUploadedFile(FileItem item, String sessionID) { // File cfile = new File(item.getName()); // System.out.println("its a file: " + sessionID + cfile.getName()); // File tosave = new File(getServletContext().getRealPath("/") // + Properties.TEMP_FILES_DIR, sessionID + cfile.getName()); // try { // item.write(tosave); // } catch (Exception ex) { // ex.printStackTrace(); // return false; // } // System.out.println("its a file2: " + sessionID + cfile.getName()); // return true; // } private void processFormField(FileItem item) { System.out.println("accccccccccccccccccccccca"); throw new UnsupportedOperationException("Not yet implemented"); } }