Advertisement
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 long sizeLimit;
- public SizableMultipartRequestInterceptor() throws IOException {
- //Configuration.getInstance() retorna uma instancia q tem o upload size limit configurado.
- //this.sizeLimit = Configuration.getInstance().getUploadSizeLimit();
- this.sizeLimit = 1024 * 64 //neste caso 64 megas.
- // 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
Advertisement