If you only transfer 1 file at a time then a 20mb payload shouldn't be a problem. But if you transfer 1000 files concurrently then yeah they all eat up memory.
The Camel FTP component is capable of transferring FTP files and stream them directly to a work directory, which mean it wont load the data into memory.
http://camel.apache.org/ftp2 - see the localWorkDirectory option.
And for ActiveMQ (Fuse MB) there is a special support for transferring big files as well. I think in fact it uses FTP instead of JMS.
Thank you very much !