Example usage for org.apache.commons.fileupload FileItemStream getName

List of usage examples for org.apache.commons.fileupload FileItemStream getName

Introduction

In this page you can find the example usage for org.apache.commons.fileupload FileItemStream getName.

Prototype

String getName();

Source Link

Document

Returns the original filename in the client's filesystem, as provided by the browser (or other client software).

Usage

From source file:org.kaaproject.avro.ui.sandbox.services.FileUploadServlet.java

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    ServletFileUpload upload = new ServletFileUpload();

    try {// w  w w.j a  va  2  s .  c  o m
        FileItemIterator iterator = upload.getItemIterator(request);
        if (iterator.hasNext()) {
            FileItemStream item = iterator.next();
            String name = item.getFieldName();

            logger.debug("Uploading file '{}' with item name '{}'", item.getName(), name);

            InputStream stream = item.openStream();

            ByteArrayOutputStream out = new ByteArrayOutputStream();
            Streams.copy(stream, out, true);

            byte[] data = out.toByteArray();

            response.setStatus(HttpServletResponse.SC_OK);
            response.setContentType("text/html");
            response.setCharacterEncoding("utf-8");
            response.getWriter().print(new String(data));
            response.flushBuffer();
        } else {
            logger.error("No file found in post request!");
            throw new RuntimeException("No file found in post request!");
        }
    } catch (Exception e) {
        logger.error("Unexpected error in FileUploadServlet.doPost: ", e);
        throw new RuntimeException(e);
    }
}

From source file:org.kaaproject.kaa.server.admin.servlet.FileUpload.java

public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    //CHECKSTYLE:ON
    ServletFileUpload upload = new ServletFileUpload();

    try {/*  w  ww  .ja v a2  s.  c o m*/
        FileItemIterator iter = upload.getItemIterator(request);
        if (iter.hasNext()) {
            FileItemStream item = iter.next();
            String name = item.getFieldName();

            LOG.debug("Uploading file '{}' with item name '{}'", item.getName(), name);

            InputStream stream = item.openStream();

            // Process the input stream
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            Streams.copy(stream, out, true);

            byte[] data = out.toByteArray();

            cacheService.uploadedFile(name, data);
        } else {
            LOG.error("No file found in post request!");
            throw new RuntimeException("No file found in post request!");
        }
    } catch (Exception ex) {
        LOG.error("Unexpected error in FileUpload.doPost: ", ex);
        throw new RuntimeException(ex);
    }

}

From source file:org.kawanfw.file.servlet.ServerFileUploadAction.java

/**
 * //from ww  w  .  j ava 2 s .co m
 * Execute the dispatched request
 * 
 * @param request
 *            the http request
 * @param response
 *            the http response
 * @param servletContextTempDir
 *            The temp dir used by Servlets
 * @param commonsConfigurator
 *            the client login specific class
 * @throws IOException
 */

public void executeAction(HttpServletRequest request, HttpServletResponse response, File servletContextTempDir,
        CommonsConfigurator commonsConfigurator, FileConfigurator fileConfigurator) throws IOException {
    PrintWriter out = response.getWriter();

    try {
        String username = null;
        String token = null;
        String filename = null;
        long chunkLength = 0;

        response.setContentType("text/html");
        // Prepare the response

        // Check that we have a file upload request
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        debug("isMultipart: " + isMultipart);

        if (!isMultipart) {
            return;
        }

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

        debug("servletContextTempDir: " + servletContextTempDir);

        // Create a new file upload handler using the factory
        // that define the secure temp dir
        ServletFileUpload upload = new ServletFileUpload(factory);

        // Parse the request
        FileItemIterator iter = upload.getItemIterator(request);

        // Parse the request
        // List /* FileItem */ items = upload.parseRequest(request);
        while (iter.hasNext()) {
            FileItemStream item = iter.next();
            String name = item.getFieldName();
            debug("name: " + name);

            // The input Stream for the File
            InputStream stream = item.openStream();

            if (item.isFormField()) {
                if (name.equals(Parameter.USERNAME)) {
                    // username = Streams.asString(stream);
                    username = StreamsEncrypted.asString(stream, commonsConfigurator);

                    // Not sure it's necessary:
                    username = HtmlConverter.fromHtml(username);

                    debug("username: " + username);
                } else if (name.equals(Parameter.TOKEN)) {
                    // token = Streams.asString(stream);
                    token = StreamsEncrypted.asString(stream, commonsConfigurator);
                    debug("token: " + token);
                } else if (name.equals(Parameter.FILENAME)) {
                    // filename = Streams.asString(stream);
                    filename = StreamsEncrypted.asString(stream, commonsConfigurator);
                    debug("filename: " + filename);
                } else if (name.equals(Parameter.CHUNKLENGTH)) {
                    String chunklengthStr = StreamsEncrypted.asString(stream, commonsConfigurator);
                    chunkLength = Long.parseLong(chunklengthStr);
                    debug("chunklengthStr: " + chunklengthStr);
                }
            } else {

                if (!isTokenValid(out, username, token, commonsConfigurator)) // Security
                // check
                {
                    return;
                }

                // Not sure it's necessary:
                filename = HtmlConverter.fromHtml(filename);

                debug("");
                debug("File field " + name + " with file name " + item.getName() + " detected.");
                debug("filename: " + filename);

                new FileTransferManager().upload(fileConfigurator, stream, username, filename, chunkLength);

                out.println(TransferStatus.SEND_OK);
                out.println("OK");

                return;
            }
        }
    } catch (Throwable throwable) {

        Throwable finalThrowable = ServerFileDispatch.getFinalThrowable(throwable);

        out.println(TransferStatus.SEND_FAILED);
        out.println(finalThrowable.getClass().getName());
        out.println(ServerUserThrowable.getMessage(finalThrowable));
        out.println(ExceptionUtils.getStackTrace(finalThrowable)); // stack trace

        try {
            ServerLogger.getLogger().log(Level.WARNING,
                    Tag.PRODUCT_EXCEPTION_RAISED + " " + ServerUserThrowable.getMessage(finalThrowable));
            ServerLogger.getLogger().log(Level.WARNING,
                    Tag.PRODUCT_EXCEPTION_RAISED + " " + ExceptionUtils.getStackTrace(finalThrowable));
        } catch (Exception e1) {
            e1.printStackTrace();
            e1.printStackTrace(System.out);
        }

    }

}

From source file:org.kimios.controller.UploadManager.java

private String startUploadFile(HttpServletRequest req) throws Exception {
    DiskFileItemFactory fp = new DiskFileItemFactory();
    fp.setRepository(new File(ConfigurationManager.getValue(Config.DM_TMP_FILES_PATH)));
    ServletFileUpload sfu = new ServletFileUpload(fp);
    QProgressListener pp = new QProgressListener(uploads);
    sfu.setProgressListener(pp);/*from  www.j av a  2s. c o m*/
    String uploadId = "";
    String name = "";
    String sec = "";
    String metaValues = "";
    String docTypeUid = "";
    String action = "";
    String documentUid = ""; //used for import
    String newVersion = "";
    boolean isSecurityInherited = false;
    long folderUid = 0;
    String mimeType = "";
    String extension = "";
    FileItemIterator t = sfu.getItemIterator(req);
    while (t.hasNext()) {

        FileItemStream st = t.next();
        if (st.isFormField()) {
            String tmpVal = Streams.asString(st.openStream(), "UTF-8");
            log.debug(st.getFieldName() + " --> " + tmpVal);
            if (st.getFieldName().equalsIgnoreCase("actionUpload")) {
                action = tmpVal;
            }
            if (st.getFieldName().equalsIgnoreCase("newVersion")) {
                newVersion = tmpVal;
            }
            if (st.getFieldName().equalsIgnoreCase("documentUid")) {
                documentUid = tmpVal;
            }
            if (st.getFieldName().equalsIgnoreCase("UPLOAD_ID")) {
                uploadId = tmpVal;
                pp.setUploadId(uploadId);
            }
            if (st.getFieldName().equalsIgnoreCase("name")) {
                name = tmpVal;
            }
            if (st.getFieldName().equalsIgnoreCase("sec")) {
                sec = StringEscapeUtils.unescapeHtml(tmpVal);
            }
            if (st.getFieldName().equalsIgnoreCase("documentTypeUid")) {
                docTypeUid = tmpVal;
            }
            if (st.getFieldName().equalsIgnoreCase("metaValues")) {
                metaValues = StringEscapeUtils.unescapeHtml(tmpVal);
            }
            if (st.getFieldName().equalsIgnoreCase("folderUid")) {
                folderUid = Long.parseLong(tmpVal);
            }
            if (st.getFieldName().equalsIgnoreCase("inheritedPermissions")) {
                isSecurityInherited = (tmpVal != null && tmpVal.equalsIgnoreCase("on"));
            }
        } else {
            InputStream in = st.openStream();
            mimeType = st.getContentType();
            extension = st.getName().substring(st.getName().lastIndexOf('.') + 1);
            int transferChunkSize = Integer.parseInt(ConfigurationManager.getValue(Config.DM_CHUNK_SIZE));

            if (action.equalsIgnoreCase("AddDocument")) {
                Document d = new Document();
                d.setCreationDate(Calendar.getInstance());
                d.setExtension(extension);
                d.setFolderUid(folderUid);
                d.setCheckedOut(false);
                d.setMimeType(mimeType);
                d.setName(name);
                d.setOwner("");
                d.setUid(-1);
                long docUid = documentController.createDocument(sessionUid, d, isSecurityInherited);
                if (!isSecurityInherited) {
                    securityController.updateDMEntitySecurities(sessionUid, docUid, 3, false,
                            DMEntitySecuritiesParser.parseFromJson(sec, docUid, 3));
                }

                fileTransferController.uploadFileFirstVersion(sessionUid, docUid, in, false);
                long documentTypeUid = -1;
                try {
                    documentTypeUid = Long.parseLong(docTypeUid);
                } catch (Exception e) {
                }
                if (documentTypeUid > 0) {
                    Map<Meta, String> mMetasValues = DMEntitySecuritiesParser
                            .parseMetasValuesFromJson(sessionUid, metaValues, documentVersionController);
                    String xmlMeta = XMLGenerators.getMetaDatasDocumentXMLDescriptor(mMetasValues,
                            "MM/dd/yyyy");
                    documentVersionController.updateDocumentVersion(sessionUid, docUid, documentTypeUid,
                            xmlMeta);
                }
            } else {

                if (action.equalsIgnoreCase("Import")) {
                    documentController.checkoutDocument(sessionUid, Long.parseLong(documentUid));
                    fileTransferController.uploadFileNewVersion(sessionUid, Long.parseLong(documentUid), in,
                            false);
                    documentController.checkinDocument(sessionUid, Long.parseLong(documentUid));
                } else if (action.equalsIgnoreCase("UpdateCurrent")) {
                    documentController.checkoutDocument(sessionUid, Long.parseLong(documentUid));
                    fileTransferController.uploadFileUpdateVersion(sessionUid, Long.parseLong(documentUid), in,
                            false);
                    documentController.checkinDocument(sessionUid, Long.parseLong(documentUid));
                }
            }

        }
    }
    return "{success: true}";
}

From source file:org.kuali.kfs.sys.web.servlet.BatchFileUploadServlet.java

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    checkAuthorization(request);/*from  w  w w  . jav a2  s  .c o  m*/
    ServletFileUpload upload = new ServletFileUpload();

    String destPath = null;
    String fileName = null;
    String tempDir = System.getProperty("java.io.tmpdir");
    // Parse the request
    try {
        FileItemIterator iter = upload.getItemIterator(request);
        while (iter.hasNext()) {
            FileItemStream item = iter.next();
            fileName = item.getName();
            LOG.info("Processing Item: " + item.getFieldName());
            if (item.isFormField()) {
                if (item.getFieldName().equals("uploadDir")) {
                    Reader str = new InputStreamReader(item.openStream());
                    StringWriter sw = new StringWriter();
                    char buf[] = new char[100];
                    int len;
                    while ((len = str.read(buf)) > 0) {
                        sw.write(buf, 0, len);
                    }
                    destPath = sw.toString();
                }
            } else {
                InputStream stream = item.openStream();
                fileName = item.getName();
                LOG.info("Uploading to Directory: " + tempDir);
                // Process the input stream
                FileOutputStream fos = new FileOutputStream(new File(tempDir, fileName));
                BufferedOutputStream bos = new BufferedOutputStream(fos, 1024 * 1024);
                byte buf[] = new byte[10240];
                int len;
                while ((len = stream.read(buf)) > 0) {
                    bos.write(buf, 0, len);
                }
                bos.close();
                stream.close();
            }
        }
        LOG.info("Copying to Directory: " + destPath);

        if (!getBatchDirectories().contains(destPath)) {
            new File(tempDir, fileName).delete();
            throw new RuntimeException("Illegal Attempt to upload to an unauthorized path: '" + destPath + "'");
        }

        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File(tempDir, fileName)));
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(destPath, fileName)),
                1024 * 1024);
        byte buf[] = new byte[10240];
        int len;
        while ((len = bis.read(buf)) > 0) {
            bos.write(buf, 0, len);
        }
        bos.close();
        bis.close();
    } catch (FileUploadException ex) {
        LOG.error("Problem Uploading file", ex);
    }
    if (fileName != null) {
        request.setAttribute("message", "Successfully uploaded " + fileName + " to " + destPath);
    } else {
        request.setAttribute("message", "Upload Failed");
    }
    doGet(request, response);
}

From source file:org.kuali.student.core.document.ui.server.upload.UploadServlet.java

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    UploadStatus status = new UploadStatus();
    request.getSession().setAttribute(request.getParameter("uploadId"), status);
    try {//from   w  ww  .ja v a  2  s  .c o m

        ServletFileUpload upload = new ServletFileUpload();
        upload.setProgressListener(
                new DocumentProgressListener(request.getParameter("uploadId"), request.getSession()));
        FileItemIterator iter = upload.getItemIterator(request);
        DocumentInfo info = new DocumentInfo();

        boolean fileError = false;
        int currentItem = 0;
        while (iter.hasNext()) {
            FileItemStream item = iter.next();
            String name = item.getFieldName();
            InputStream stream = item.openStream();
            if (item.isFormField()) {
                String value = Streams.asString(stream);
                if (name.equals("documentDescription")) {
                    RichTextInfo text = new RichTextInfo();
                    text.setPlain(value);
                    info.setDescr(text);
                }
            } else {
                String fullFileName = item.getName();
                if (fullFileName != null) {
                    String filename = FilenameUtils.getName(fullFileName);
                    FileStatus fileStatus = new FileStatus();
                    fileStatus.setFileName(filename);
                    status.getFileStatusList().add(currentItem, fileStatus);
                    DocumentBinaryInfo bInfo = new DocumentBinaryInfo();
                    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
                    byte[] buffer = new byte[4096];
                    while (true) {
                        int read = stream.read(buffer);
                        if (read == -1) {
                            break;
                        } else {
                            bytes.write(buffer, 0, read);
                            fileStatus.setProgress(fileStatus.getProgress() + read);
                        }
                    }
                    bytes.flush();
                    fileStatus.setStatus(FileTransferStatus.UPLOAD_FINISHED);
                    bInfo.setBinary(new String(Base64.encodeBase64(bytes.toByteArray())));

                    info.setDocumentBinary(bInfo);
                    info.setStateKey(DtoState.ACTIVE.toString());
                    info.setFileName(filename);

                    int extSeperator = filename.lastIndexOf(".");
                    info.setName(filename.substring(0, extSeperator));

                    //FIXME Probably temporary solution for type on document info
                    String type = "documentType." + filename.substring(extSeperator + 1).toLowerCase();
                    info.setTypeKey(type);
                } else {
                    //No file specified error
                    status.setStatus(UploadTransferStatus.ERROR);
                }
            }

            if (info.getDescr() != null && info.getDocumentBinary() != null && info.getType() != null) {
                //FileStatus fileStatus = status.getFileStatusMap().get(info.getFileName());
                FileStatus fileStatus = status.getFileStatusList().get(currentItem);
                try {
                    DocumentInfo createdDoc = documentService.createDocument(info.getTypeKey(),
                            "documentCategory.proposal", info, ContextUtils.getContextInfo());
                    fileStatus.setStatus(FileTransferStatus.COMMIT_FINISHED);
                    if (createdDoc != null) {
                        status.getCreatedDocIds().add(createdDoc.getId());
                        fileStatus.setDocId(createdDoc.getId());
                    }

                    RefDocRelationInfo relationInfo = new RefDocRelationInfo();
                    relationInfo.setStateKey(DtoState.ACTIVE.toString());
                    relationInfo.setDescr(info.getDescr());
                    relationInfo.setRefObjectId(request.getParameter("referenceId"));
                    relationInfo.setRefObjectTypeKey(request.getParameter("refObjectTypeKey"));
                    relationInfo.setTitle(info.getFileName());
                    relationInfo.setDocumentId(createdDoc.getId());
                    relationInfo.setType(request.getParameter("refDocRelationTypeKey"));
                    documentService.createRefDocRelation(relationInfo.getRefObjectTypeKey(),
                            relationInfo.getRefObjectId(), relationInfo.getDocumentId(),
                            relationInfo.getTypeKey(), relationInfo, ContextUtils.getContextInfo());
                } catch (Exception e) {
                    fileError = true;
                    LOG.error("Exception occurred", e);
                    fileStatus.setStatus(FileTransferStatus.ERROR);
                }
                info = new DocumentInfo();
                currentItem++;
            }
        }

        if (fileError) {
            status.setStatus(UploadTransferStatus.ERROR);
        } else {
            status.setStatus(UploadTransferStatus.COMMIT_FINISHED);
        }

    } catch (Exception e) {
        status.setStatus(UploadTransferStatus.ERROR);
        LOG.error("Exception occurred", e);
    }

}

From source file:org.kurento.repository.internal.http.RepositoryHttpServlet.java

private void uploadMultipart(HttpServletRequest req, HttpServletResponse resp, OutputStream repoItemOutputStrem)
        throws IOException {

    log.debug("Multipart detected");

    ServletFileUpload upload = new ServletFileUpload();

    try {/*from w  w w .  ja v a  2 s  .  c om*/

        // Parse the request
        FileItemIterator iter = upload.getItemIterator(req);
        while (iter.hasNext()) {
            FileItemStream item = iter.next();
            String name = item.getFieldName();
            try (InputStream stream = item.openStream()) {
                if (item.isFormField()) {
                    // TODO What to do with this?
                    log.debug("Form field {} with value {} detected.", name, Streams.asString(stream));
                } else {

                    // TODO Must we support multiple files uploading?
                    log.debug("File field {} with file name detected.", name, item.getName());

                    log.debug("Start to receive bytes (estimated bytes)",
                            Integer.toString(req.getContentLength()));
                    int bytes = IOUtils.copy(stream, repoItemOutputStrem);
                    resp.setStatus(SC_OK);
                    log.debug("Bytes received: {}", Integer.toString(bytes));
                }
            }
        }

    } catch (FileUploadException e) {
        throw new IOException(e);
    }
}

From source file:org.nema.medical.mint.server.controller.JobsController.java

public void handleUpload(HttpServletRequest request, File jobFolder, List<File> files,
        Map<String, String> params) throws IOException, FileUploadException {

    byte buf[] = new byte[32 * 1024];

    int fileCount = 0;
    LOG.info("creating local files");

    // Parse the request
    ServletFileUpload upload = new ServletFileUpload();
    FileItemIterator iter;//  w  w  w.j  ava  2s  .  co  m
    iter = upload.getItemIterator(request);
    while (iter.hasNext()) {
        FileItemStream item = iter.next();
        String name = item.getFieldName();
        InputStream in = item.openStream();

        if (item.isFormField()) {
            String value = Streams.asString(in);
            LOG.debug("found form field " + name + " = " + value);
            params.put(name, value);
        } else {
            File file;

            // special handling for first file - must be metadata!
            if (files.isEmpty()) {
                String filename = item.getName();

                LOG.info("loading metadata from " + filename);
                outer: {
                    for (String extension : supportedMetadataExtensions) {
                        if (filename.endsWith(extension)) {
                            filename = "metadata" + extension;
                            break outer;
                        }
                    }

                    //At this point, no proper filename has been established. Last resort, use content type!
                    String contentType = item.getContentType();
                    if ("text/xml".equals(contentType)) {
                        filename = "metadata.xml";
                    } else if ("application/octet-stream".equals(contentType)) {
                        filename = "metadata.gpb";
                    } else {
                        // dump out and write the content... will fail later
                        LOG.error("unable to determine metadata type for " + item.getName());
                        filename = "metadata.dat";
                    }
                }

                file = new File(jobFolder, filename);
            } else {
                final String msgPartName = item.getFieldName();
                try {
                    if (!msgPartName.startsWith("binary")) {
                        throw new Exception();
                    }
                    final String itemIdStr = msgPartName.substring("binary".length());
                    final int itemId = Integer.parseInt(itemIdStr);
                    file = new File(jobFolder, String.format("%d.dat", itemId));
                } catch (final Exception e) {
                    throw new IOException("Invalid message part name for binary data: '" + msgPartName
                            + "'; must start with 'binary', followed by a number");
                }
            }

            if (file.exists()) {
                throw new IOException("File for message part already exists: '" + file.getName() + "'");
            }
            FileOutputStream out = null;
            out = new FileOutputStream(file);
            try {
                while (true) {
                    int len = in.read(buf);
                    if (len < 0)
                        break;
                    out.write(buf, 0, len);
                }
            } finally {
                if (out != null) {
                    out.close();
                    files.add(file);
                    fileCount++;
                }
            }
        }
    }
    LOG.info("created " + fileCount + " files.");
}

From source file:org.odk.aggregate.parser.MultiPartFormData.java

/**
 * Construct a mult-part form data container by parsing
 * a multi part form request into a set of multipartformitems. The
 * information are stored in items and are indexed by either 
 * the field name or the file name (or both) provided in the http submission
 * /*w  w  w  . j av a  2s.  co  m*/
 * @param req
 *     an HTTP request from a multipart form 
        
 * @throws FileUploadException
 * @throws IOException
 */
public MultiPartFormData(HttpServletRequest req) throws FileUploadException, IOException {

    fieldNameMap = new HashMap<String, MultiPartFormItem>();
    fileNameMap = new HashMap<String, MultiPartFormItem>();

    ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
    upload.setFileSizeMax(ParserConsts.FILE_SIZE_MAX);

    FileItemIterator items = upload.getItemIterator(req);
    while (items.hasNext()) {
        FileItemStream item = items.next();
        ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
        BufferedInputStream formStream = new BufferedInputStream(item.openStream());

        // TODO: determine ways to possibly improve efficiency
        int nextByte = formStream.read();
        while (nextByte != -1) {
            byteStream.write(nextByte);
            nextByte = formStream.read();
        }

        MultiPartFormItem data = new MultiPartFormItem(item.getFieldName(), item.getName(),
                item.getContentType(), byteStream);

        String fieldName = item.getFieldName();
        if (fieldName != null) {
            fieldNameMap.put(fieldName, data);
        }

        String fileName = item.getName();
        if (fileName != null) {
            // TODO: possible bug in ODK collect is truncating file extension
            // may need to remove this code after ODK collect is fixed
            int indexOfExtension = fileName.lastIndexOf(".");
            if (indexOfExtension > 0) {
                fileNameMap.put(fileName.substring(0, indexOfExtension), data);
            }
            fileNameMap.put(fileName, data);
        }
        formStream.close();
    }
}

From source file:org.odk.voice.storage.MultiPartFormData.java

/**
 * Construct a mult-part form data container by parsing
 * a multi part form request into a set of multipartformitems. The
 * information are stored in items and are indexed by either 
 * the field name or the file name (or both) provided in the http submission
 * //from w  w  w  . j  av a2 s.  com
 * @param req
 *     an HTTP request from a multipart form 
        
 * @throws FileUploadException
 * @throws IOException
 */
public MultiPartFormData(HttpServletRequest req) throws FileUploadException, IOException {

    fieldNameMap = new HashMap<String, MultiPartFormItem>();
    fileNameMap = new HashMap<String, MultiPartFormItem>();

    ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
    upload.setFileSizeMax(FileConstants.MAX_FILE_SIZE);

    FileItemIterator items = upload.getItemIterator(req);
    while (items.hasNext()) {
        FileItemStream item = items.next();
        ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
        BufferedInputStream formStream = new BufferedInputStream(item.openStream());

        // TODO: determine ways to possibly improve efficiency
        int nextByte = formStream.read();
        while (nextByte != -1) {
            byteStream.write(nextByte);
            nextByte = formStream.read();
        }

        MultiPartFormItem data = new MultiPartFormItem(item.getFieldName(), item.getName(),
                item.getContentType(), byteStream.toByteArray());

        String fieldName = item.getFieldName();
        if (fieldName != null) {
            fieldNameMap.put(fieldName, data);
        }

        String fileName = item.getName();
        if (fileName != null) {
            // TODO: possible bug in ODK collect is truncating file extension
            // may need to remove this code after ODK collect is fixed
            int indexOfExtension = fileName.lastIndexOf(".");
            if (indexOfExtension > 0) {
                fileNameMap.put(fileName.substring(0, indexOfExtension), data);
            }
            fileNameMap.put(fileName, data);
        }
    }
}