///////////////////////////////////////////////////////////////////////////// // // Project ProjectForge Community Edition // www.projectforge.org // // Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de) // // ProjectForge is dual-licensed. // // This community edition is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License as published // by the Free Software Foundation; version 3 of the License. // // This community edition is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General // Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, see http://www.gnu.org/licenses/. // ///////////////////////////////////////////////////////////////////////////// package org.projectforge.web.imagecropper; import java.io.File; import java.io.IOException; import java.util.Iterator; import java.util.List; 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.FileItemFactory; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.projectforge.user.PFUserDO; import org.projectforge.web.UserFilter; /** * Servlet Funktion: Temporärer Upload eines Images in das Verzeichnis tempimages. Wird benötigt um Bild vom lokalen Rechner über den Server * in den Flexclient zu laden * */ public class UploadImageFileTemporary extends HttpServlet { private static final long serialVersionUID = -6889184720152393862L; private static final long MAX_SUPPORTED_FILE_SIZE = 10000000; // 10 Megabyte private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(UploadImageFileTemporary.class); /** * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException { log.debug("Start doPost"); final PFUserDO user = UserFilter.getUser(request); if (user == null) { log.warn("Calling of UploadImageFileTemp without logged in user."); return; } // check if the sent request is of the type multi part final boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (isMultipart == false) { log.warn("The request is not of the type multipart"); return; } try { // Parse the request final FileItem imgFile = getImgFileItem(request); // get the file item of the multipart request // everything ok so far so process the file uploaded if (imgFile == null || imgFile.getSize() == 0) { log.warn("No file was uploaded, aborting!"); return; } if (imgFile.getSize() > MAX_SUPPORTED_FILE_SIZE) { log.warn("Maximum file size exceded for file '" + imgFile.getName() + "': " + imgFile.getSize()); return; } final File tmpImageFile = ImageCropperUtils.getTempFile(user); // Temporary file log.info("Writing tmp file: " + tmpImageFile.getAbsolutePath()); try { // Write new File imgFile.write(tmpImageFile); } catch (Exception e) { log.error("Could not write " + tmpImageFile.getAbsolutePath(), e); } } catch (FileUploadException ex) { log.warn("Failure reading the multipart request"); log.warn(ex.getMessage(), ex); } final ServletOutputStream out = response.getOutputStream(); out.println("text/html"); } /** * This function gets the fileItem from the form * * @param items the list of fields sent to this servlet * @return the imgItem if not found it returns null */ private FileItem getImgFileItem(final HttpServletRequest request) throws FileUploadException { // Create a factory for disk-based file items final FileItemFactory factory = new DiskFileItemFactory(); // Create a new file upload handler final ServletFileUpload upload = new ServletFileUpload(factory); final List< ? > items = upload.parseRequest(request); // get the items sent by the form FileItem fileItem = null; final Iterator< ? > iter = items.iterator(); // iterate over the items and if the required field is found break the loop while (iter.hasNext()) { fileItem = (FileItem) iter.next(); if (fileItem.isFormField() == false) { break; } } return fileItem; } }