package eu.impact_project.wsclient; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.sql.Timestamp; import java.util.Calendar; import java.util.Iterator; import java.util.List; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class UploadFiles extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; private ServletFileUpload uploader = null; public void init(ServletConfig config) throws ServletException { super.init(config); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("Entro al doGet"); String fileName = request.getParameter("filename"); if(fileName == null || fileName.equals("")){ throw new ServletException("File Name can't be null or empty"); } File file = new File(request.getSession().getServletContext().getAttribute("FILES_DIR")+File.separator+fileName); if(!file.exists()){ throw new ServletException("File doesn't exists on server."); } ServletContext ctx = getServletContext(); InputStream fis = new FileInputStream(file); String mimeType = ctx.getMimeType(file.getAbsolutePath()); response.setContentType("application/force-download"); response.setDateHeader("Expires", 0); response.setContentType(mimeType != null? mimeType:"application/octet-stream"); response.setContentLength((int) file.length()); response.setHeader("Content-Transfer-Encoding", "binary"); response.setHeader("Cache-Control", "private"); response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); ServletOutputStream os = response.getOutputStream(); byte[] bufferData = new byte[1024]; int read=0; while((read = fis.read(bufferData))!= -1){ os.write(bufferData, 0, read); } os.flush(); os.close(); fis.close(); System.out.println("File downloaded at client successfully"); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if(!ServletFileUpload.isMultipartContent(request)){ throw new ServletException("Content type is not multipart/form-data"); } DiskFileItemFactory fileFactory = new DiskFileItemFactory(); File filesDir = (File) request.getSession().getServletContext().getAttribute("FILES_DIR_FILE"); fileFactory.setRepository(filesDir); this.uploader = new ServletFileUpload(fileFactory); response.setContentType("text/html"); PrintWriter out = response.getWriter(); response.setContentType("text/plain"); // Set content type of the response so that jQuery knows what it can expect. response.setCharacterEncoding("UTF-8"); // You want world domination, huh? //out.write("<html><head></head><body>"); try { List<FileItem> fileItemsList = uploader.parseRequest(request); Iterator<FileItem> fileItemsIterator = fileItemsList.iterator(); while(fileItemsIterator.hasNext()){ FileItem fileItem = fileItemsIterator.next(); String filename = fileItem.getName(); filename = filename.replaceAll("[^\\dA-Za-z0-9.]", "").replaceAll("\\s+", ""); Timestamp currentTimestamp = new java.sql.Timestamp(Calendar.getInstance().getTime().getTime()); String name, extension; if(filename.lastIndexOf(".")!=-1) { name = filename.substring(0, filename.lastIndexOf(".")); extension = filename.substring(filename.lastIndexOf(".")); } else { name = filename; extension = ""; } filename = name + currentTimestamp.getTime() + extension; System.out.println("filename: " + filename); System.out.println("FieldName="+fileItem.getFieldName()); System.out.println("FileName="+fileItem.getName()); System.out.println("ContentType="+fileItem.getContentType()); System.out.println("Size in bytes="+fileItem.getSize()); System.out.println("FILES_DIR: " + request.getSession().getServletContext().getAttribute("FILES_DIR") + " ## File.separator" + File.separator + " ## getName: " + fileItem.getName()); File file = new File(request.getSession().getServletContext().getAttribute("FILES_DIR") + File.separator + filename); System.out.println("Absolute Path at server="+file.getAbsolutePath()); fileItem.write(file); //out.write("File "+fileItem.getName()+ " uploaded successfully."); //out.write("<br>"); //response.setHeader("Content-Disposition", "attachment; filename=\"UploadDownloadFileServlet?filename=" + filename ); out.write(filename); } } catch (FileUploadException e) { System.out.println("Exception in uploading file."); } catch (Exception e) { System.out.println("Exception in uploading file."); } //out.write("</body></html>"); //RequestDispatcher rd = getServletContext().getRequestDispatcher( // "/interface.jsp"); //rd.forward(request, response); } }