/ftr-gwt-library-file/src/main/java/eu/future/earth/gwt/server/file/FileUploadServlet.java

http://ftr-gwt-library.googlecode.com/ · Java · 146 lines · 97 code · 23 blank · 26 comment · 8 complexity · 0d16e3f2ce54a2d4a187b9d5fe8568e7 MD5 · raw file

  1. /*
  2. * Copyright 2007 Future Earth, info@future-earth.eu
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  5. * use this file except in compliance with the License. You may obtain a copy of
  6. * the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  12. * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  13. * License for the specific language governing permissions and limitations under
  14. * the License.
  15. */
  16. package eu.future.earth.gwt.server.file;
  17. import java.io.File;
  18. import java.io.IOException;
  19. import java.io.PrintWriter;
  20. import java.util.List;
  21. import java.util.logging.Level;
  22. import java.util.logging.Logger;
  23. import javax.servlet.ServletException;
  24. import javax.servlet.ServletOutputStream;
  25. import javax.servlet.http.HttpServlet;
  26. import javax.servlet.http.HttpServletRequest;
  27. import javax.servlet.http.HttpServletResponse;
  28. import javax.servlet.http.HttpSession;
  29. import org.apache.commons.fileupload.FileItem;
  30. import org.apache.commons.fileupload.FileUploadException;
  31. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  32. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  33. import org.json.JSONException;
  34. import org.json.JSONObject;
  35. import eu.future.earth.gwt.client.file.FileHolder;
  36. public abstract class FileUploadServlet extends HttpServlet {
  37. /**
  38. *
  39. */
  40. private static final long serialVersionUID = 1720563248457411214L;
  41. private static final String CONTENT_TYPE = "text/html";
  42. private final static Logger LOGGER = Logger.getLogger(FileUploadServlet.class.getName());
  43. /**
  44. * This method will try to display the image. Requested parameters are
  45. */
  46. protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
  47. // Get All the info for getting the temp file of the sored file
  48. String name = req.getParameter("name");
  49. String stored = req.getParameter("stored");
  50. final FileHolder holder = new FileHolder();
  51. holder.setName(name);
  52. FileDataHolder file = null;
  53. response.setHeader("Expires", "Sat, 6 May 1995 12:00:00 GMT");
  54. // Set standard HTTP/1.1 no-cache headers.
  55. response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
  56. // Set IE extended HTTP/1.1 no-cache headers (use addHeader).
  57. response.addHeader("Cache-Control", "post-check=0, pre-check=0");
  58. response.setHeader("Pragma", "no-cache");
  59. response.setContentType("image/jpeg");
  60. if ("true".equals(stored)) {
  61. file = getStoredFile(req, holder);
  62. } else {
  63. file = getTempFile(req.getSession(), holder);
  64. }
  65. if (file != null) {
  66. response.setContentType(file.getType());
  67. // response.addHeader("Content-Disposition", "attachment;filename=" + name);
  68. ServletOutputStream out = response.getOutputStream();
  69. out.write(file.getData());
  70. out.close();
  71. } else {
  72. // Stream the default type
  73. response.sendError(HttpServletResponse.SC_FOUND, "Not found " + name + " " + stored);
  74. }
  75. }
  76. public abstract FileDataHolder getStoredFile(HttpServletRequest req, FileHolder holder);
  77. public abstract int getFileThreshold();
  78. public abstract File getTempDir();
  79. public static FileDataHolder getTempFile(HttpSession session, FileHolder holder) {
  80. return (FileDataHolder) session.getAttribute(holder.getName());
  81. }
  82. @SuppressWarnings("unchecked")
  83. protected void doPost(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
  84. final JSONObject feedback = new JSONObject();
  85. final PrintWriter out = response.getWriter();
  86. try {
  87. boolean isMultipart = ServletFileUpload.isMultipartContent(req);
  88. if (isMultipart) {
  89. final DiskFileItemFactory factory = new DiskFileItemFactory();
  90. File tempDir = getTempDir();
  91. if (!tempDir.exists()) {
  92. tempDir.mkdirs();
  93. }
  94. factory.setRepository(tempDir);
  95. factory.setSizeThreshold(getFileThreshold());
  96. final ServletFileUpload upload = new ServletFileUpload(factory);
  97. try {
  98. final List<FileItem> items = (List<FileItem>) upload.parseRequest(req);
  99. for (int i = 0; i < items.size(); i++) {
  100. final FileItem current = items.get(i);
  101. final HttpSession session = req.getSession();
  102. final FileDataHolder holder = new FileDataHolder();
  103. holder.setData(current.get());
  104. holder.setFileName(current.getName());
  105. holder.setType(current.getContentType());
  106. session.setAttribute(holder.getFileName(), holder);
  107. feedback.put("fileName", holder.getFileName());
  108. feedback.put("fileType", holder.getType());
  109. feedback.put("fileSize", String.valueOf(current.getSize()));
  110. }
  111. feedback.put("result", "succes");
  112. } catch (FileUploadException e) {
  113. LOGGER.log(Level.WARNING, e.getMessage());
  114. feedback.put("result", "error");
  115. }
  116. }
  117. response.setContentType(CONTENT_TYPE);
  118. } catch (JSONException e) {
  119. throw new ServletException(e);
  120. }
  121. out.write(feedback.toString());
  122. }
  123. }