Example usage for org.apache.commons.fileupload.disk DiskFileItemFactory setRepository

List of usage examples for org.apache.commons.fileupload.disk DiskFileItemFactory setRepository

Introduction

In this page you can find the example usage for org.apache.commons.fileupload.disk DiskFileItemFactory setRepository.

Prototype

public void setRepository(File repository) 

Source Link

Document

Sets the directory used to temporarily store files that are larger than the configured size threshold.

Usage

From source file:org.nyu.edu.dlts.server.SchematronServlet.java

/**
 * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
 * methods.//  w w  w .j  ava  2s . co m
 *
 * @param request servlet request
 * @param response servlet response
 * @throws ServletException if a servlet-specific error occurs
 * @throws IOException if an I/O error occurs
 */
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();

    // Create a factory for disk-based file items
    DiskFileItemFactory factory = new DiskFileItemFactory();

    // Configure a repository (to ensure a secure temp location is used)
    ServletContext servletContext = this.getServletConfig().getServletContext();

    String schematronFilename = servletContext.getRealPath("/schematrons/ArchivesSpace-EAD-validator.sch");
    schematronFile = new File(schematronFilename);

    File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
    factory.setRepository(repository);

    // Create a new file upload handler
    ServletFileUpload upload = new ServletFileUpload(factory);
    try {
        // Parse the request
        List<FileItem> items = upload.parseRequest(request);
        Iterator<FileItem> iter = items.iterator();
        File[] uploadedFiles = new File[4];
        String format = null;

        int fileIndex = 0;
        while (iter.hasNext()) {
            FileItem item = iter.next();

            if (item.isFormField()) {
                format = item.getString();
            } else {
                String fieldName = item.getFieldName();
                String fileName = item.getName();

                if (!fileName.trim().isEmpty()) {
                    uploadedFiles[fileIndex] = new File(repository, fileName);
                    item.write(uploadedFiles[fileIndex]);
                }

                fileIndex++;
            }
        }

        // if we have files the process them
        if (uploadedFiles[0] != null && format != null) {
            String results = "";

            for (int i = 0; i < uploadedFiles.length; i++) {
                File file = uploadedFiles[i];
                if (file != null) {
                    results += validateUsingSchematron(format, file);
                }
            }

            out.println(results);
        } else {
            out.println("<!DOCTYPE html>");
            out.println("<html>");
            out.println("<head>");
            out.println("<title>SchematronServlet Error</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Error, missing upload file ...</h1>");
            out.println("</body>");
            out.println("</html>");
        }
    } catch (FileUploadException ex) {
        Logger.getLogger(SchematronServlet.class.getName()).log(Level.SEVERE, null, ex);
    } catch (Exception ex) {
        Logger.getLogger(SchematronServlet.class.getName()).log(Level.SEVERE, null, ex);
    } finally {
        out.close();
    }
}

From source file:org.onesocialweb.openfire.web.FileServlet.java

private void processPost(HttpServletRequest request, HttpServletResponse response) throws Exception {
    final PrintWriter out = response.getWriter();

    // 1- Bind this request to a XMPP JID
    final JID user = getAuthenticatedUser(request);
    if (user == null) {
        throw new AuthenticationException();
    }// w  w w.ja va2s . c  o  m

    // 2- Process the file
    final UploadManager uploadManager = UploadManager.getInstance();

    // Files larger than a threshold should be stored on disk in temporary
    // storage place
    final DiskFileItemFactory factory = new DiskFileItemFactory();
    factory.setSizeThreshold(256000);
    factory.setRepository(getTempFolder());

    // Prepare the upload parser and set a max size to enforce
    final ServletFileUpload upload = new ServletFileUpload(factory);
    upload.setSizeMax(512000000);

    // Get the request ID
    final String requestId = request.getParameter("requestId");

    // Create a progress listener
    ProgressListener progressListener = new ProgressListener() {
        private long lastNotification = 0;

        public void update(long pBytesRead, long pContentLength, int pItems) {
            if (lastNotification == 0 || (pBytesRead - lastNotification) > NOTIFICATION_THRESHOLD) {
                lastNotification = pBytesRead;
                UploadManager.getInstance().updateProgress(user, pBytesRead, pContentLength, requestId);
            }
        }
    };
    upload.setProgressListener(progressListener);

    // Process the upload
    List items = upload.parseRequest(request);
    for (Object objItem : items) {
        FileItem item = (FileItem) objItem;
        if (!item.isFormField()) {
            String fileID = UUID.randomUUID().toString();
            File target = new File(getUploadFolder(), fileID);
            item.write(target);
            UploadManager.getInstance().commitFile(user, target, item.getName(), requestId);
            break; // Store only one file
        }
    }
}

From source file:org.opencms.ade.upload.CmsUploadBean.java

/**
 * Parses a request of the form <code>multipart/form-data</code>.<p>
 * //from ww w .j  ava  2 s .co m
 * The result list will contain items of type <code>{@link FileItem}</code>.
 * If the request has no file items, then <code>null</code> is returned.<p>
 * 
 * @param listener the upload listener
 * 
 * @return the list of <code>{@link FileItem}</code> extracted from the multipart request,
 *      or <code>null</code> if the request has no file items
 *      
 * @throws Exception if anything goes wrong
 */
private List<FileItem> readMultipartFileItems(CmsUploadListener listener) throws Exception {

    DiskFileItemFactory factory = new DiskFileItemFactory();
    // maximum size that will be stored in memory
    factory.setSizeThreshold(4096);
    // the location for saving data that is larger than the threshold
    factory.setRepository(new File(OpenCms.getSystemInfo().getPackagesRfsPath()));

    // create a file upload servlet
    ServletFileUpload fu = new ServletFileUpload(factory);
    // set the listener
    fu.setProgressListener(listener);
    // set encoding to correctly handle special chars (e.g. in filenames)
    fu.setHeaderEncoding(getRequest().getCharacterEncoding());
    // set the maximum size for a single file (value is in bytes)
    long maxFileSizeBytes = OpenCms.getWorkplaceManager().getFileBytesMaxUploadSize(getCmsObject());
    if (maxFileSizeBytes > 0) {
        fu.setFileSizeMax(maxFileSizeBytes);
    }

    // try to parse the request
    try {
        return CmsCollectionsGenericWrapper.list(fu.parseRequest(getRequest()));
    } catch (SizeLimitExceededException e) {
        // request size is larger than maximum allowed request size, throw an error
        Integer actualSize = new Integer((int) (e.getActualSize() / 1024));
        Integer maxSize = new Integer((int) (e.getPermittedSize() / 1024));
        throw new CmsUploadException(m_bundle
                .key(org.opencms.ade.upload.Messages.ERR_UPLOAD_REQUEST_SIZE_LIMIT_2, actualSize, maxSize), e);
    } catch (FileSizeLimitExceededException e) {
        // file size is larger than maximum allowed file size, throw an error
        Integer actualSize = new Integer((int) (e.getActualSize() / 1024));
        Integer maxSize = new Integer((int) (e.getPermittedSize() / 1024));
        throw new CmsUploadException(m_bundle.key(org.opencms.ade.upload.Messages.ERR_UPLOAD_FILE_SIZE_LIMIT_3,
                actualSize, e.getFileName(), maxSize), e);
    }
}

From source file:org.opencms.util.CmsRequestUtil.java

/**
 * Parses a request of the form <code>multipart/form-data</code>.
 * /*from w w  w.  j  a v  a 2  s  .  co  m*/
 * The result list will contain items of type <code>{@link FileItem}</code>.
 * If the request is not of type <code>multipart/form-data</code>, then <code>null</code> is returned.<p>
 * 
 * @param request the HTTP servlet request to parse
 * 
 * @return the list of <code>{@link FileItem}</code> extracted from the multipart request,
 *      or <code>null</code> if the request was not of type <code>multipart/form-data</code>
 */
public static List<FileItem> readMultipartFileItems(HttpServletRequest request) {

    if (!ServletFileUpload.isMultipartContent(request)) {
        return null;
    }
    DiskFileItemFactory factory = new DiskFileItemFactory();
    // maximum size that will be stored in memory
    factory.setSizeThreshold(4096);
    // the location for saving data that is larger than getSizeThreshold()
    factory.setRepository(new File(OpenCms.getSystemInfo().getPackagesRfsPath()));
    ServletFileUpload fu = new ServletFileUpload(factory);
    // set encoding to correctly handle special chars (e.g. in filenames)
    fu.setHeaderEncoding(request.getCharacterEncoding());
    List<FileItem> result = new ArrayList<FileItem>();
    try {
        List<FileItem> items = CmsCollectionsGenericWrapper.list(fu.parseRequest(request));
        if (items != null) {
            result = items;
        }
    } catch (FileUploadException e) {
        LOG.error(Messages.get().getBundle().key(Messages.LOG_PARSE_MULIPART_REQ_FAILED_0), e);
    }
    return result;
}

From source file:org.opensubsystems.core.util.servlet.WebParamUtils.java

/**
 * Parse multipart request and separate regular parameters and files. The
 * files names are also stored as values of the parameters that are used to 
 * upload them./*from  w  w  w.j a  v a 2 s  .c  o  m*/
 * 
 * @param strLogPrefix - log prefix used for all log output to tie together
 *                       the same invocations
 * @param request - request to get parameter from
 * @return TwoElementStruct<Map<String, String>, Map<String, FileItem>> - the
 *                  first element is map of parameter names and their values. 
 *                  For uploaded files the files names are also stored here as 
 *                  values of the parameters that are used to upload them.
 *                  If there is only one value of the parameter then the value
 *                  is stored directly as String. If there are multiple values
 *                  then the values are stored as List<String>.
 *                  The second element is map of parameter names and the files
 *                  that are uploaded as these parameters.
 * @throws FileUploadException - an error has occurred
 */
public static TwoElementStruct<Map<String, Object>, Map<String, FileItem>> parseMultipartRequest(
        String strLogPrefix, HttpServletRequest request) throws FileUploadException {
    if (GlobalConstants.ERROR_CHECKING) {
        assert ServletFileUpload.isMultipartContent(request) : "Specified request is not multipart";
    }

    TwoElementStruct<Map<String, Object>, Map<String, FileItem>> returnValue;
    FileCleaningTracker fileCleaningTracker;
    String strTempDir;
    DiskFileItemFactory factory;
    Properties prpSettings;
    int iMaxInMemorySize;
    int iMaxSize;
    ServletFileUpload upload;
    List<FileItem> items;

    // TODO: Improve: Consider calling 
    // FileUtils.createTemporarySubdirectory
    // as done in legacy Formature.DocumentTemplateServlet.getFormToProcess
    // to store the temporary files per session and request
    strTempDir = FileUtils.getTemporaryDirectory();

    prpSettings = Config.getInstance().getProperties();
    iMaxInMemorySize = PropertyUtils.getIntPropertyInRange(prpSettings, REQUEST_UPLOAD_MEMORY_THRESHOLD,
            REQUEST_UPLOAD_MEMORY_THRESHOLD_DEFAULT, "Maximal size of uploaded file that is kept in memory", 1, // 0 is allowed 
            Integer.MAX_VALUE);
    iMaxSize = PropertyUtils.getIntPropertyInRange(prpSettings, REQUEST_UPLOAD_MAX_SIZE,
            REQUEST_UPLOAD_MAX_SIZE_DEFAULT, "Maximal size of uploaded file", 1, // 0 is allowed 
            Integer.MAX_VALUE);

    fileCleaningTracker = FileCleanerCleanup.getFileCleaningTracker(request.getServletContext());

    // Create a factory for disk-based file items
    factory = new DiskFileItemFactory();
    factory.setFileCleaningTracker(fileCleaningTracker);
    // Set factory constraints
    factory.setSizeThreshold(iMaxInMemorySize);
    factory.setRepository(new File(strTempDir));

    // Create a new file upload handler
    upload = new ServletFileUpload(factory);
    // Set overall request size constraint
    upload.setSizeMax(iMaxSize);

    // Parse the request
    items = upload.parseRequest(request);
    if ((items != null) && (!items.isEmpty())) {
        Map mpParams;
        Map mpFiles;
        String strParamName;
        String strValue;
        Object temp;
        List<String> lstValues;

        mpParams = new HashMap(items.size());
        mpFiles = new HashMap();

        returnValue = new TwoElementStruct(mpParams, mpFiles);
        for (FileItem item : items) {
            strParamName = item.getFieldName();
            if (item.isFormField()) {
                strValue = item.getString();
            } else {
                strValue = item.getName();
                mpFiles.put(strParamName, item);
            }

            temp = mpParams.put(strParamName, strValue);
            if (temp != null) {
                // There was already an value so convert it to list of values
                if (temp instanceof String) {
                    // There are currently exactly two values
                    lstValues = new ArrayList<>();
                    lstValues.add((String) temp);
                    mpParams.put(strParamName, lstValues);
                } else {
                    // There are currently more than two values
                    lstValues = (List<String>) temp;
                }
                lstValues.add(strValue);
            }
        }
    } else {
        returnValue = new TwoElementStruct(Collections.emptyMap(), Collections.emptyMap());
    }

    return returnValue;
}

From source file:org.origin.common.servlet.WebConsoleUtil.java

/**
 * An utility method, that is used to filter out simple parameter from file parameter when multipart transfer encoding is used.
 *
 * This method processes the request and sets a request attribute {@link AbstractWebConsolePlugin#ATTR_FILEUPLOAD}. The attribute value is a {@link Map}
 * where the key is a String specifying the field name and the value is a {@link org.apache.commons.fileupload.FileItem}.
 *
 * @param request/*from ww  w.  j a v  a 2s . co m*/
 *            the HTTP request coming from the user
 * @param name
 *            the name of the parameter
 * @return if not multipart transfer encoding is used - the value is the parameter value or <code>null</code> if not set. If multipart is used, and the
 *         specified parameter is field - then the value of the parameter is returned.
 */
public static final String getParameter(HttpServletRequest request, String name) {
    // just get the parameter if not a multipart/form-data POST
    if (!FileUploadBase.isMultipartContent(new ServletRequestContext(request))) {
        return request.getParameter(name);
    }

    // check, whether we already have the parameters
    Map params = (Map) request.getAttribute(ATTR_FILEUPLOAD);
    if (params == null) {
        // parameters not read yet, read now
        // Create a factory for disk-based file items
        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setSizeThreshold(256000);
        // See https://issues.apache.org/jira/browse/FELIX-4660
        final Object repo = request.getAttribute(ATTR_FILEUPLOAD_REPO);
        if (repo instanceof File) {
            factory.setRepository((File) repo);
        }

        // Create a new file upload handler
        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setSizeMax(-1);

        // Parse the request
        params = new HashMap();
        try {
            List items = upload.parseRequest(request);
            for (Iterator fiter = items.iterator(); fiter.hasNext();) {
                FileItem fi = (FileItem) fiter.next();
                FileItem[] current = (FileItem[]) params.get(fi.getFieldName());
                if (current == null) {
                    current = new FileItem[] { fi };
                } else {
                    FileItem[] newCurrent = new FileItem[current.length + 1];
                    System.arraycopy(current, 0, newCurrent, 0, current.length);
                    newCurrent[current.length] = fi;
                    current = newCurrent;
                }
                params.put(fi.getFieldName(), current);
            }
        } catch (FileUploadException fue) {
            // TODO: log
        }
        request.setAttribute(ATTR_FILEUPLOAD, params);
    }

    FileItem[] param = (FileItem[]) params.get(name);
    if (param != null) {
        for (int i = 0; i < param.length; i++) {
            if (param[i].isFormField()) {
                return param[i].getString();
            }
        }
    }

    // no valid string parameter, fail
    return null;
}

From source file:org.ow2.proactive_grid_cloud_portal.common.server.CredentialsServlet.java

private void login(HttpServletRequest request, HttpServletResponse response) {
    response.setContentType("text/html");

    try {// w  w w  .j  a v  a2 s  .c om
        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setSizeThreshold(4096);
        factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setSizeMax(1000000);

        List<?> fileItems = upload.parseRequest(request);
        Iterator<?> i = fileItems.iterator();

        String user = "";
        String pass = "";
        String sshKey = "";

        while (i.hasNext()) {
            FileItem fi = (FileItem) i.next();

            if (fi.isFormField()) {
                String name = fi.getFieldName();
                String value = fi.getString();

                if (name.equals("username")) {
                    user = value;
                } else if (name.equals("password")) {
                    pass = value;
                }
            } else {
                String field = fi.getFieldName();
                byte[] bytes = IOUtils.toByteArray(fi.getInputStream());
                if (field.equals("sshkey")) {
                    sshKey = new String(bytes);
                }
            }
            fi.delete();
        }

        String responseS = Service.get().createCredentials(user, pass, sshKey);
        response.setHeader("Content-disposition", "attachment; filename=" + user + "_cred.txt");
        response.setHeader("Location", "" + user + ".cred.txt");
        response.getWriter().write(responseS);

    } catch (Throwable t) {
        try {
            response.getWriter().write(t.getMessage());
        } catch (IOException e1) {
            LOGGER.warn("Failed to return login error to client, error was:" + t.getMessage(), e1);
        }
    }
}

From source file:org.ow2.proactive_grid_cloud_portal.common.server.LoginServlet.java

private void login(HttpServletRequest request, HttpServletResponse response) {
    response.setContentType("text/html");
    File cred = null;/*from   w  ww  .  j ava  2s .com*/
    try {
        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setSizeThreshold(4096);
        factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setSizeMax(1000000);

        List<?> fileItems = upload.parseRequest(request);
        Iterator<?> i = fileItems.iterator();

        String user = "";
        String pass = "";
        String sshKey = "";

        while (i.hasNext()) {
            FileItem fi = (FileItem) i.next();

            if (fi.isFormField()) {
                String name = fi.getFieldName();
                String value = fi.getString();

                if (name.equals("username")) {
                    user = value;
                } else if (name.equals("password")) {
                    pass = value;
                }
            } else {
                String field = fi.getFieldName();

                byte[] bytes = IOUtils.toByteArray(fi.getInputStream());

                if (field.equals("credential")) {
                    cred = File.createTempFile("credential", null);
                    cred.deleteOnExit();
                    fi.write(cred);
                } else if (field.equals("sshkey")) {
                    sshKey = new String(bytes);
                }
            }

            fi.delete();
        }

        String responseS = Service.get().login(user, pass, cred, sshKey);
        String s = "{ \"sessionId\" : \"" + responseS + "\" }";
        response.getWriter().write(SafeHtmlUtils.htmlEscape(s));
    } catch (Throwable t) {
        try {
            response.getWriter().write(SafeHtmlUtils.htmlEscape(t.getMessage()));
        } catch (IOException e1) {
            LOGGER.warn("Failed to return login error to client, error was:" + t.getMessage(), e1);
        }
    } finally {
        if (cred != null)
            cred.delete();
    }
}

From source file:org.ow2.proactive_grid_cloud_portal.rm.server.NSCreationServlet.java

private void createNs(HttpServletRequest request, HttpServletResponse response) {

    String sessionId = "";
    String callbackName = "";
    String nsName = "";
    String infra = "";
    String policy = "";

    ArrayList<String> infraParams = new ArrayList<>();
    ArrayList<String> infraFileParams = new ArrayList<>();
    ArrayList<String> policyParams = new ArrayList<>();
    ArrayList<String> policyFileParams = new ArrayList<>();

    boolean readingInfraParams = false;
    boolean readingPolicyParams = false;

    try {/*from   w  ww .j  a  v a  2s .c  o m*/
        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setSizeThreshold(4096);
        factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setSizeMax(MAX_UPLOAD_SIZE);

        List<?> fileItems = upload.parseRequest(request);
        Iterator<?> i = fileItems.iterator();
        while (i.hasNext()) {
            FileItem fi = (FileItem) i.next();
            String fieldName = fi.getFieldName();
            if (fi.isFormField()) {
                if (fieldName.equals("sessionId")) {
                    sessionId = fi.getString();
                } else if (fieldName.equals("nsCallback")) {
                    callbackName = fi.getString();
                } else if (fieldName.equals("nsName")) {
                    nsName = fi.getString();
                } else if (fieldName.equals("infra")) {
                    infra = fi.getString();
                    readingInfraParams = true;
                } else if (fieldName.equals("policy")) {
                    policy = fi.getString();
                    readingPolicyParams = true;
                    readingInfraParams = false;
                } else if (readingInfraParams) {
                    infraParams.add(fi.getString());
                } else if (readingPolicyParams) {
                    policyParams.add(fi.getString());
                } else {
                    LOGGER.warn("Unexpected param " + fieldName);
                }
            } else {
                if (readingInfraParams) {
                    byte[] bytes = IOUtils.toByteArray(fi.getInputStream());
                    infraFileParams.add(new String(bytes));
                } else if (readingPolicyParams) {
                    byte[] bytes = IOUtils.toByteArray(fi.getInputStream());
                    policyFileParams.add(new String(bytes));
                } else {
                    LOGGER.warn("Unexpected param " + fieldName);
                }
            }
        }
        String failFast = null;
        if (nsName.length() == 0) {
            failFast = "You need to pick a name for the new Node Source";
        } else if (policy.length() == 0 || policy.equals("undefined")) {
            failFast = "No Policy selected";
        } else if (infra.length() == 0 || infra.equals("undefined")) {
            failFast = "No Infrastructure selected";
        }

        if (failFast != null) {
            throw new RestServerException(failFast);
        }

        String jsonResult = ((RMServiceImpl) RMServiceImpl.get()).createNodeSource(sessionId, nsName, infra,
                toArray(infraParams), toArray(infraFileParams), policy, toArray(policyParams),
                toArray(policyFileParams));

        if (jsonResult.equals("true")) {
            jsonResult = createNonEscapedSimpleJsonPair("result", "true");
        }

        write(response, createJavascriptPayload(callbackName, jsonResult));
    } catch (Throwable t) {
        write(response, createJavascriptPayload(callbackName,
                createEscapedSimpleJsonPair("errorMessage", t.getMessage())));
    }
}

From source file:org.ow2.proactive_grid_cloud_portal.rm.server.ServletRequestTransformer.java

@SuppressWarnings("unchecked")
public List<FileItem> getFormItems(HttpServletRequest request) throws FileUploadException {
    DiskFileItemFactory factory = new DiskFileItemFactory();
    factory.setSizeThreshold(FILE_ITEM_THRESHOLD_SIZE);
    factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
    ServletFileUpload upload = new ServletFileUpload(factory);
    upload.setSizeMax(MAX_FILE_UPLOAD_SIZE);
    return (List<FileItem>) upload.parseRequest(request);
}