public void parseRequestStream ( final InputStream inputStream , final String encoding ) throws IOException { setParsed ( ) ; MultipartRequestInputStream input = new MultipartRequestInputStream ( inputStream ) ; input . readBoundary ( ) ; while ( true ) { FileUploadHeader header = input . readDataHeader ( encoding ) ; if ( header == null ) { break ; } if ( header . isFile ) { String fileName = header . fileName ; if ( fileName . length ( ) > 0 ) { if ( header . contentType . indexOf ( "application/x-macbinary" ) > 0 ) { input . skipBytes ( 128 ) ; } } FileUpload newFile = fileUploadFactory . create ( input ) ; newFile . processStream ( ) ; if ( fileName . length ( ) == 0 ) { // file was specified, but no name was provided, therefore it was not uploaded if ( newFile . getSize ( ) == 0 ) { newFile . size = - 1 ; } } putFile ( header . formFieldName , newFile ) ; } else { // no file, therefore it is regular form parameter. FastByteArrayOutputStream fbos = new FastByteArrayOutputStream ( ) ; input . copyAll ( fbos ) ; String value = encoding != null ? new String ( fbos . toByteArray ( ) , encoding ) : new String ( fbos . toByteArray ( ) ) ; putParameter ( header . formFieldName , value ) ; } input . skipBytes ( 1 ) ; input . mark ( 1 ) ; // read byte, but may be end of stream int nextByte = input . read ( ) ; if ( nextByte == - 1 || nextByte == ' ' ) { input . reset ( ) ; break ; } input . reset ( ) ; } }
Extracts uploaded files and parameters from the request data .