On 19/08/2011 14:37, Steffen Heil (Mailinglisten) wrote: > Hi > > Short question: How can I prevent tomcat to receive the complete post data?
Stop sending the data before it's all been sent.
> Long question:
>
> I have a servlet that uses apache commons fileupload to process incoming
> uploads using the streaming api.
> Short version of the code:
>
> InputStream inputStream;
> try {
> ServletFileUpload upload = new ServletFileUpload();
> iterator = upload.getItemIterator( request );
> if ( ! iterator.hasNext() )
> return;
> FileItemStream item = iterator.next();
> if ( item.isFormField() || ! "file".equals( item.getFieldName() ) )
> return;
> inputStream = item.openStream();
> use( inputStream )
> } finally {
> try {
> inputStream.close();
> } catch ( Throwable ignored ) {
> // just ignore
> }
> }
>
> Now, the method use(InputStream) may decide that this file is not wanted and
> may NOT read the inputstream fully. Or there may be more field, that I am
> not interested in. I want to abort reading the request, as there may be
> several hundred megabytes of data coming.
>
> However inputStream.close() in FileItemStream seams to read everything that
> follows. So I tried not to close that steam. Still some component read
> everything, I suspect tomcat did so - to allow keepalive connections. Then I
> tried to throw an IOException, but no change.
>
> So my question is: How can I prevent tomcat to receive the complete post
> data?
AFAIK Tomcat processes the request before the user code in a servlet is
active, so you can't do it from inside a servlet.
Someone will correct me if I'm wrong...
p
signature.asc
Description: OpenPGP digital signature
