[ https://issues.apache.org/jira/browse/CAMEL-14929?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17088094#comment-17088094 ]
Anderson Vaz commented on CAMEL-14929: -------------------------------------- [~acosentino], sorry, busy day, anyway I was able to build. I will prepare the fix and submit it. Should I do it for both clients aws-s3 and aws2-s3? > camel-aws2-s3 - Doesn't support stream download of large files. > ---------------------------------------------------------------- > > Key: CAMEL-14929 > URL: https://issues.apache.org/jira/browse/CAMEL-14929 > Project: Camel > Issue Type: Improvement > Components: camel-aws2 > Affects Versions: 3.2.0 > Reporter: Anderson Vaz > Assignee: Andrea Cosentino > Priority: Minor > > Hi, > The component `*camel-aws2-s3*` should be able to support streaming > consume/download to allow the copy/download of large files from S3. The > current implementation or 'saves' the contents of input stream into the > memory or completely disregard it not giving a change for the next components > to manipulate the stream. This seems to be a no ideal implementation. > The issue essentially is on class > `*org.apache.camel.component.aws2.s3.AWS2S3Endpoint*` in between lines *169* > to *178* and lines *201* to *212*. > The logic on lines 169 to 178 there is: > * if the parameter `*includeBody*` is *true* it will consume the S3 stream > into the memory which is no ideal for large files. > * if the parameter `*includeBody*` is *false* it won't consume the S3 stream > however the S3 stream will be lost, I couldn't find any other way to access > it therefore the S3 is open for nothing on this case. This doesn't seem > reasonable as well. I think the S3 stream should be put in the `*body*` raw > so the next component in the pipeline can consume it. > The logic on lines 201 to 212 is: > * if the parameter `*includeBody*` is *false* it surprisingly close the S3 > input stream confirming that there will be no way to consume it afterwards. > * if the parameter `*includeBody*` is *true* the S3 input stream will be > left open however there is way to access it as it is created on line 77 of > `*org.apache.camel.component.aws2.s3.AWS2S3Consumer*` and afterwards if not > included in the body it get lost. > The ideal behaviour I think would be: > * if `*includedBody*` is *true* then consume S3 input stream into the > memory, save it in the body and close it. > * if `*includeBody*` is *false* then put the raw S3 input stream in the body > and don't close it. > * if `*autoCloseBody*` is *true* then schedule the S3 input stream closing > for when exchange is finished. > * if `*autoCloseBody*` is *false* then leave to caller to close it which I'm > not sure how this can be done in the current implementation. > > -- This message was sent by Atlassian Jira (v8.3.4#803005)