/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
- /*
- * Copyright 2007 Future Earth, info@future-earth.eu
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
- package eu.future.earth.gwt.server.file;
- import java.io.File;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.util.List;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- import javax.servlet.ServletException;
- import javax.servlet.ServletOutputStream;
- 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.FileUploadException;
- import org.apache.commons.fileupload.disk.DiskFileItemFactory;
- import org.apache.commons.fileupload.servlet.ServletFileUpload;
- import org.json.JSONException;
- import org.json.JSONObject;
- import eu.future.earth.gwt.client.file.FileHolder;
- public abstract class FileUploadServlet extends HttpServlet {
- /**
- *
- */
- private static final long serialVersionUID = 1720563248457411214L;
- private static final String CONTENT_TYPE = "text/html";
- private final static Logger LOGGER = Logger.getLogger(FileUploadServlet.class.getName());
- /**
- * This method will try to display the image. Requested parameters are
- */
- protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
- // Get All the info for getting the temp file of the sored file
- String name = req.getParameter("name");
- String stored = req.getParameter("stored");
- final FileHolder holder = new FileHolder();
- holder.setName(name);
- FileDataHolder file = null;
- response.setHeader("Expires", "Sat, 6 May 1995 12:00:00 GMT");
- // Set standard HTTP/1.1 no-cache headers.
- response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
- // Set IE extended HTTP/1.1 no-cache headers (use addHeader).
- response.addHeader("Cache-Control", "post-check=0, pre-check=0");
- response.setHeader("Pragma", "no-cache");
- response.setContentType("image/jpeg");
- if ("true".equals(stored)) {
- file = getStoredFile(req, holder);
- } else {
- file = getTempFile(req.getSession(), holder);
- }
- if (file != null) {
- response.setContentType(file.getType());
- // response.addHeader("Content-Disposition", "attachment;filename=" + name);
- ServletOutputStream out = response.getOutputStream();
- out.write(file.getData());
- out.close();
- } else {
- // Stream the default type
- response.sendError(HttpServletResponse.SC_FOUND, "Not found " + name + " " + stored);
- }
- }
- public abstract FileDataHolder getStoredFile(HttpServletRequest req, FileHolder holder);
- public abstract int getFileThreshold();
- public abstract File getTempDir();
- public static FileDataHolder getTempFile(HttpSession session, FileHolder holder) {
- return (FileDataHolder) session.getAttribute(holder.getName());
- }
- @SuppressWarnings("unchecked")
- protected void doPost(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
- final JSONObject feedback = new JSONObject();
- final PrintWriter out = response.getWriter();
- try {
- boolean isMultipart = ServletFileUpload.isMultipartContent(req);
- if (isMultipart) {
- final DiskFileItemFactory factory = new DiskFileItemFactory();
- File tempDir = getTempDir();
- if (!tempDir.exists()) {
- tempDir.mkdirs();
- }
- factory.setRepository(tempDir);
- factory.setSizeThreshold(getFileThreshold());
- final ServletFileUpload upload = new ServletFileUpload(factory);
- try {
- final List<FileItem> items = (List<FileItem>) upload.parseRequest(req);
- for (int i = 0; i < items.size(); i++) {
- final FileItem current = items.get(i);
- final HttpSession session = req.getSession();
- final FileDataHolder holder = new FileDataHolder();
- holder.setData(current.get());
- holder.setFileName(current.getName());
- holder.setType(current.getContentType());
- session.setAttribute(holder.getFileName(), holder);
- feedback.put("fileName", holder.getFileName());
- feedback.put("fileType", holder.getType());
- feedback.put("fileSize", String.valueOf(current.getSize()));
- }
- feedback.put("result", "succes");
- } catch (FileUploadException e) {
- LOGGER.log(Level.WARNING, e.getMessage());
- feedback.put("result", "error");
- }
- }
- response.setContentType(CONTENT_TYPE);
- } catch (JSONException e) {
- throw new ServletException(e);
- }
- out.write(feedback.toString());
- }
- }