001 /* 002 * Copyright © 2008, 2009 Pedro Agulló Soliveres. 003 * 004 * This file is part of DirectJNgine. 005 * 006 * DirectJNgine is free software: you can redistribute it and/or modify 007 * it under the terms of the GNU General Public License as published by 008 * the Free Software Foundation, either version 3 of the License. 009 * 010 * DirectJNgine is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU General Public License for more details. 014 * 015 * You should have received a copy of the GNU General Public License 016 * along with DirectJNgine. If not, see <http://www.gnu.org/licenses/>. 017 * 018 * This software uses the ExtJs library (http://extjs.com), which is 019 * distributed under the GPL v3 license (see http://extjs.com/license). 020 */ 021 022 package com.softwarementors.extjs.djn.router; 023 024 import java.io.IOException; 025 import java.io.Writer; 026 import java.util.HashMap; 027 import java.util.List; 028 import java.util.Map; 029 030 import org.apache.commons.fileupload.FileItem; 031 import org.apache.commons.fileupload.FileUploadException; 032 import org.apache.commons.fileupload.disk.DiskFileItemFactory; 033 import org.apache.commons.fileupload.servlet.ServletFileUpload; 034 import org.apache.log4j.Logger; 035 036 import com.softwarementors.extjs.djn.config.Registry; 037 038 public class UploadFormPostRequestProcessor extends FormPostRequestProcessorBase { 039 040 private static final Logger logger = Logger.getLogger(UploadFormPostRequestProcessor.class); 041 042 public UploadFormPostRequestProcessor(Registry registry, Dispatcher dispatcher, boolean debugMode) { 043 super( registry, dispatcher, debugMode ); 044 } 045 046 public void process(List<FileItem> fileItems, Writer writer) throws IOException { 047 assert fileItems != null; 048 assert writer != null; 049 050 Map<String, String> formParameters = new HashMap<String,String>(); 051 Map<String, FileItem> fileFields = new HashMap<String,FileItem>(); 052 for( FileItem item : fileItems ) { 053 if (item.isFormField()) { 054 formParameters.put( item.getFieldName(), item.getString()); 055 } 056 else { 057 fileFields.put( item.getFieldName(), item ); 058 } 059 } 060 061 logger.debug( "request=>" + getFormParametersLogString(formParameters) + " FILES: " + getFileParametersLogString(fileFields)); 062 String result = process(formParameters, fileFields); 063 064 String resultString = "<html><body><textarea>"; 065 resultString += result.toString(); // .replace("\"", "\\\""); 066 resultString += ("</textarea></body></html>"); 067 writer.write( resultString ); 068 logger.debug( "response=>" + resultString ); 069 } 070 071 private String getFormParametersLogString(Map<String, String> formParameters) { 072 StringBuilder result = new StringBuilder(); 073 for( String fieldName : formParameters.keySet() ) { 074 result.append( fieldName ); 075 result.append( "="); 076 result.append( formParameters.get(fieldName)); 077 result.append( ";"); 078 } 079 return result.toString(); 080 } 081 082 private String getFileParametersLogString(Map<String, FileItem> fileFields) { 083 StringBuilder result = new StringBuilder(); 084 for( String fieldName : fileFields.keySet() ) { 085 FileItem fileItem = fileFields.get(fieldName); 086 result.append( fieldName ); 087 result.append( "="); 088 String fileName = fileItem.getName(); 089 result.append( fileName ); 090 result.append( ";"); 091 } 092 return result.toString(); 093 } 094 095 public static ServletFileUpload createFileUploader() { 096 // Create a factory for disk-based file items 097 DiskFileItemFactory factory = new DiskFileItemFactory(); 098 // Set factory constraints 099 /* 100 int maxMemorySizeThreshold = 1024 * 10; 101 factory.setSizeThreshold(maxMemorySizeThreshold); // If request size bigger than this, store files to disk 102 factory.setRepository(new File("c:\temp")); // Where to store temporary files created because of size bigger than that specified in setSizeThreshold 103 */ 104 105 // Create a new file upload handler 106 ServletFileUpload upload = new ServletFileUpload(factory); 107 108 // Set upload handler limits 109 /* 110 int maxRequestSize = 1024 * 1000; // What happens if 111 int maxFileSize = 1024 * 1000; 112 upload.setSizeMax(maxRequestSize); 113 upload.setFileSizeMax(maxFileSize); 114 */ 115 return upload; 116 } 117 118 public void handleFileUploadException(FileUploadException e) { 119 assert e != null; 120 121 com.softwarementors.extjs.djn.router.FileUploadException ex = com.softwarementors.extjs.djn.router.FileUploadException.forFileUploadException(e); 122 logger.error( ex.getMessage(), ex); 123 throw ex; 124 } 125 126 }