camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jonas Koperdraat <jo...@jonaskoperdraat.nl>
Subject Streaming upload
Date Sat, 20 Aug 2016 11:44:31 GMT
Hi,

I am trying to process a multipart/form-data upload in a streaming
manner. We are using camel-servlet and camel-rest (2.17.0) to route
REST paths to Spring beans for processing the request. However, with
anything that I have tried, I only get to the Spring bean after the
entire request has been recieved, including the entire multipart
message.

I would like to be able to process the uploaded file without it being
temporarily stored in memory or on disk as our application will need
to be able to process very large uploads simultaneously. I can
accomplish this when implementing a HttpRequestServlet and using
Apache's commons-fileupload
(https://commons.apache.org/proper/commons-fileupload/streaming.html),
but I'm having less luck when using Camel to route REST paths to our
beans.

We define our rest paths like so:

rest("upload")
   .post()
   .route()
   .bean(UploadHandler.class, "handleUpload");

Explicitly adding noStreamCaching() to the route doesn't seem to
change anything (which makes sense, given that the default behaviour
as of Camel 2.0 is not to cache streams).

Some of the options i've tried:
 * Not using camel-rest, but directly route from camel-servlet
 * Not using .bean, but .to
 * Using .process
 * Using camel-jetty

But each attempt had the same effect; the entire request had to be
received (and presumably processed by Camel into an Exchange object)
before I could start processing it in my bean.

Is it possible to use Camel to route an HTTP POST request to a Spring
bean in such a way that I can the process it in a streaming manner?
And if so, how?

Any help is greatly appreciated.

Kind regards,

Jonas Koperdraat

Mime
View raw message