Guest User

lavieri

a guest
Sep 14th, 2010
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.01 KB | None | 0 0
  1. import java.io.File;
  2. import java.io.IOException;
  3. import java.util.List;
  4.  
  5. import org.apache.commons.fileupload.FileItem;
  6. import org.apache.commons.fileupload.FileUploadException;
  7. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  8. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  9. import org.apache.log4j.Logger;
  10. import org.vraptor.Interceptor;
  11. import org.vraptor.LogicException;
  12. import org.vraptor.LogicFlow;
  13. import org.vraptor.http.VRaptorServletRequest;
  14. import org.vraptor.interceptor.multipart.MultipartItemsProcessor;
  15. import org.vraptor.view.ViewException;
  16.  
  17. /**
  18.  * Interceptor capable of parsing the input stream.
  19.  *
  20.  * @author Guilherme Silveira
  21.  * @author Paulo Silveira
  22.  */
  23. public class SizableMultipartRequestInterceptor implements Interceptor {
  24.     static final Logger LOG = Logger.getLogger(MultipartRequestInterceptor.class);
  25.  
  26.     private final File temporaryDirectory;
  27.  
  28.     private final long sizeLimit;
  29.  
  30.     public MultipartRequestInterceptor() throws IOException {
  31.         //Configuration.getInstance() retorna uma instancia q tem o upload size limit configurado.
  32.                 this.sizeLimit = Configuration.getInstance().getUploadSizeLimit();
  33.        
  34.         // this directory must be configurable through the properties
  35.         this.temporaryDirectory = File.createTempFile("raptor.", ".upload").getParentFile();
  36.     }
  37.  
  38.     @SuppressWarnings("unchecked")
  39.     public void intercept(LogicFlow flow) throws LogicException, ViewException {
  40.  
  41.         if (!ServletFileUpload.isMultipartContent(flow.getLogicRequest().getRequest())) {
  42.             flow.execute();
  43.             return;
  44.         }
  45.  
  46.         VRaptorServletRequest servletRequest = flow.getLogicRequest().getRequest();
  47.  
  48.         LOG.debug("Trying to parse multipart request.");
  49.  
  50.         DiskFileItemFactory factory = createFactoryForDiskBasedFileItems();
  51.  
  52.         ServletFileUpload fileUploadHandler = new ServletFileUpload(factory);
  53.  
  54.         // TODO: variables in raptor.properties
  55.         fileUploadHandler.setSizeMax(sizeLimit);
  56.  
  57.  
  58.         // assume we know there are two files. The first file is a small
  59.         // text file, the second is unknown and is written to a file on
  60.         // the server
  61.         List<FileItem> fileItems;
  62.         try {
  63.             fileItems = fileUploadHandler.parseRequest(servletRequest);
  64.         }
  65.         catch (FileUploadException e) {
  66.             LOG.warn("There was some problem parsing this multipart request, or someone is not sending a RFC1867 compatible multipart request.", e);
  67.             flow.execute();
  68.             return;
  69.         }
  70.  
  71.         if (LOG.isDebugEnabled()) {
  72.             LOG.debug("Found [" + fileItems.size() + "] attributes in the multipart form submission. Parsing them.");
  73.         }
  74.  
  75.         new MultipartItemsProcessor(fileItems, servletRequest).process();
  76.  
  77.         flow.execute();
  78.  
  79.         // should we delete the temporary files afterwards or onExit as done by
  80.         // now?
  81.         // maybe also a config in .properties
  82.  
  83.     }
  84.  
  85.  
  86.     private DiskFileItemFactory createFactoryForDiskBasedFileItems() {
  87.         DiskFileItemFactory factory = new DiskFileItemFactory(4096 * 16, this.temporaryDirectory);
  88.         LOG.debug("Using repository [" + factory.getRepository() + "]");
  89.         return factory;
  90.     }
  91. }
Advertisement
Add Comment
Please, Sign In to add comment