Not a member of Pastebin yet?
                        Sign Up,
                        it unlocks many cool features!                    
                - import java.io.File;
 - import java.io.IOException;
 - import java.util.List;
 - 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.apache.log4j.Logger;
 - import org.vraptor.Interceptor;
 - import org.vraptor.LogicException;
 - import org.vraptor.LogicFlow;
 - import org.vraptor.http.VRaptorServletRequest;
 - import org.vraptor.interceptor.multipart.MultipartItemsProcessor;
 - import org.vraptor.view.ViewException;
 - /**
 - * Interceptor capable of parsing the input stream.
 - *
 - * @author Guilherme Silveira
 - * @author Paulo Silveira
 - */
 - public class SizableMultipartRequestInterceptor implements Interceptor {
 - static final Logger LOG = Logger.getLogger(MultipartRequestInterceptor.class);
 - private final File temporaryDirectory;
 - private final long sizeLimit;
 - public MultipartRequestInterceptor() throws IOException {
 - //Configuration.getInstance() retorna uma instancia q tem o upload size limit configurado.
 - this.sizeLimit = Configuration.getInstance().getUploadSizeLimit();
 - // this directory must be configurable through the properties
 - this.temporaryDirectory = File.createTempFile("raptor.", ".upload").getParentFile();
 - }
 - @SuppressWarnings("unchecked")
 - public void intercept(LogicFlow flow) throws LogicException, ViewException {
 - if (!ServletFileUpload.isMultipartContent(flow.getLogicRequest().getRequest())) {
 - flow.execute();
 - return;
 - }
 - VRaptorServletRequest servletRequest = flow.getLogicRequest().getRequest();
 - LOG.debug("Trying to parse multipart request.");
 - DiskFileItemFactory factory = createFactoryForDiskBasedFileItems();
 - ServletFileUpload fileUploadHandler = new ServletFileUpload(factory);
 - // TODO: variables in raptor.properties
 - fileUploadHandler.setSizeMax(sizeLimit);
 - // assume we know there are two files. The first file is a small
 - // text file, the second is unknown and is written to a file on
 - // the server
 - List<FileItem> fileItems;
 - try {
 - fileItems = fileUploadHandler.parseRequest(servletRequest);
 - }
 - catch (FileUploadException e) {
 - LOG.warn("There was some problem parsing this multipart request, or someone is not sending a RFC1867 compatible multipart request.", e);
 - flow.execute();
 - return;
 - }
 - if (LOG.isDebugEnabled()) {
 - LOG.debug("Found [" + fileItems.size() + "] attributes in the multipart form submission. Parsing them.");
 - }
 - new MultipartItemsProcessor(fileItems, servletRequest).process();
 - flow.execute();
 - // should we delete the temporary files afterwards or onExit as done by
 - // now?
 - // maybe also a config in .properties
 - }
 - private DiskFileItemFactory createFactoryForDiskBasedFileItems() {
 - DiskFileItemFactory factory = new DiskFileItemFactory(4096 * 16, this.temporaryDirectory);
 - LOG.debug("Using repository [" + factory.getRepository() + "]");
 - return factory;
 - }
 - }
 
Advertisement
 
                    Add Comment                
                
                        Please, Sign In to add comment