Search in sources :

Example 1 with FileItemHeaders

use of org.apache.tomcat.util.http.fileupload.FileItemHeaders in project tomcat by apache.

the class FileItemIteratorImpl method findNextItem.

/**
 * Called for finding the next item, if any.
 *
 * @return True, if an next item was found, otherwise false.
 * @throws IOException An I/O error occurred.
 */
private boolean findNextItem() throws FileUploadException, IOException {
    if (eof) {
        return false;
    }
    if (currentItem != null) {
        currentItem.close();
        currentItem = null;
    }
    final MultipartStream multi = getMultiPartStream();
    for (; ; ) {
        final boolean nextPart;
        if (skipPreamble) {
            nextPart = multi.skipPreamble();
        } else {
            nextPart = multi.readBoundary();
        }
        if (!nextPart) {
            if (currentFieldName == null) {
                // Outer multipart terminated -> No more data
                eof = true;
                return false;
            }
            // Inner multipart terminated -> Return to parsing the outer
            multi.setBoundary(multiPartBoundary);
            currentFieldName = null;
            continue;
        }
        final FileItemHeaders headers = fileUploadBase.getParsedHeaders(multi.readHeaders());
        if (currentFieldName == null) {
            // We're parsing the outer multipart
            final String fieldName = fileUploadBase.getFieldName(headers);
            if (fieldName != null) {
                final String subContentType = headers.getHeader(FileUploadBase.CONTENT_TYPE);
                if (subContentType != null && subContentType.toLowerCase(Locale.ENGLISH).startsWith(FileUploadBase.MULTIPART_MIXED)) {
                    currentFieldName = fieldName;
                    // Multiple files associated with this field name
                    final byte[] subBoundary = fileUploadBase.getBoundary(subContentType);
                    multi.setBoundary(subBoundary);
                    skipPreamble = true;
                    continue;
                }
                final String fileName = fileUploadBase.getFileName(headers);
                currentItem = new FileItemStreamImpl(this, fileName, fieldName, headers.getHeader(FileUploadBase.CONTENT_TYPE), fileName == null, getContentLength(headers));
                currentItem.setHeaders(headers);
                progressNotifier.noteItem();
                itemValid = true;
                return true;
            }
        } else {
            final String fileName = fileUploadBase.getFileName(headers);
            if (fileName != null) {
                currentItem = new FileItemStreamImpl(this, fileName, currentFieldName, headers.getHeader(FileUploadBase.CONTENT_TYPE), false, getContentLength(headers));
                currentItem.setHeaders(headers);
                progressNotifier.noteItem();
                itemValid = true;
                return true;
            }
        }
        multi.discardBodyData();
    }
}
Also used : FileItemHeaders(org.apache.tomcat.util.http.fileupload.FileItemHeaders) MultipartStream(org.apache.tomcat.util.http.fileupload.MultipartStream)

Aggregations

FileItemHeaders (org.apache.tomcat.util.http.fileupload.FileItemHeaders)1 MultipartStream (org.apache.tomcat.util.http.fileupload.MultipartStream)1