Advertisement
Guest User

lavieri

a guest
Sep 14th, 2010
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.09 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 long sizeLimit;
  29.  
  30.     public SizableMultipartRequestInterceptor() throws IOException {
  31.         //Configuration.getInstance() retorna uma instancia q tem o upload size limit configurado.
  32.                 //this.sizeLimit = Configuration.getInstance().getUploadSizeLimit();
  33.                 this.sizeLimit = 1024 * 64 //neste caso 64 megas.
  34.                
  35.        
  36.         // this directory must be configurable through the properties
  37.         this.temporaryDirectory = File.createTempFile("raptor.", ".upload").getParentFile();
  38.     }
  39.  
  40.     @SuppressWarnings("unchecked")
  41.     public void intercept(LogicFlow flow) throws LogicException, ViewException {
  42.  
  43.         if (!ServletFileUpload.isMultipartContent(flow.getLogicRequest().getRequest())) {
  44.             flow.execute();
  45.             return;
  46.         }
  47.  
  48.         VRaptorServletRequest servletRequest = flow.getLogicRequest().getRequest();
  49.  
  50.         LOG.debug("Trying to parse multipart request.");
  51.  
  52.         DiskFileItemFactory factory = createFactoryForDiskBasedFileItems();
  53.  
  54.         ServletFileUpload fileUploadHandler = new ServletFileUpload(factory);
  55.  
  56.         // TODO: variables in raptor.properties
  57.         fileUploadHandler.setSizeMax(sizeLimit);
  58.  
  59.  
  60.         // assume we know there are two files. The first file is a small
  61.         // text file, the second is unknown and is written to a file on
  62.         // the server
  63.         List<FileItem> fileItems;
  64.         try {
  65.             fileItems = fileUploadHandler.parseRequest(servletRequest);
  66.         }
  67.         catch (FileUploadException e) {
  68.             LOG.warn("There was some problem parsing this multipart request, or someone is not sending a RFC1867 compatible multipart request.", e);
  69.             flow.execute();
  70.             return;
  71.         }
  72.  
  73.         if (LOG.isDebugEnabled()) {
  74.             LOG.debug("Found [" + fileItems.size() + "] attributes in the multipart form submission. Parsing them.");
  75.         }
  76.  
  77.         new MultipartItemsProcessor(fileItems, servletRequest).process();
  78.  
  79.         flow.execute();
  80.  
  81.         // should we delete the temporary files afterwards or onExit as done by
  82.         // now?
  83.         // maybe also a config in .properties
  84.  
  85.     }
  86.  
  87.  
  88.     private DiskFileItemFactory createFactoryForDiskBasedFileItems() {
  89.         DiskFileItemFactory factory = new DiskFileItemFactory(4096 * 16, this.temporaryDirectory);
  90.         LOG.debug("Using repository [" + factory.getRepository() + "]");
  91.         return factory;
  92.     }
  93. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement