0

我有一个使用 apache camel 的 rest api。当我在路由上发出发布请求时,它应该从 S3 获取文件并将文件的内容作为响应发送回来。我正在发送 json data(filename, bucketName, accesskey, secretkey, region) 以便从 s3 中提取文件。我能够提取文件,但我不知道如何将文件的内容作为响应发回。截至目前,我可以将其下载到我的本地目录。

public static class HelloRoute extends RouteBuilder {
       
        @Override
        public void configure() {
            rest("/")
                .post("file-from-s3")
                    .route()
                    .setHeader(AWS2S3Constants.KEY, constant("filename"))
                    .to("aws2-s3://bucketnameaccessKey=INSERT&secretKey=INSERT&region=INSERT&operation=getObject")
                    .to("file:/tmp/")
                    .endRest();
        }

现在,.to("file:/tmp/")我不想将文件的内容作为响应发送回来。我怎么能在 apache 骆驼中做到这一点?

4

1 回答 1

1

Camel 将组件的响应写回响应。因此,如果您删除最后一个路由to("file:/tmp/"),则响应将返回文件内容。

但是,我不知道文件 AWS 响应它将是什么,但如果它不是您需要的,您可以在将其写入文件并创建一个读取文件并返回内容的处理器之后。就像是:

public static class HelloRoute extends RouteBuilder {
       
        @Override
        public void configure() {

        final FileReader fileReader = new FileReader();

            rest("/")
                .post("file-from-s3")
                    .route()
                    .setHeader(AWS2S3Constants.KEY, constant("filename"))
                    .to("aws2-s3://bucketnameaccessKey=INSERT&secretKey=INSERT&region=INSERT&operation=getObject")
                    .to("file:/tmp/")
                    .process(fileReader)
                    .endRest();
        }


        public class FileReader implements Processor {


            @Override
            public void process(final Exchange exchange) {
                    //read the file from "/tmp/" and write to the body
                    //exchange.getIn().setBody(....);
            }
        }
}
于 2020-07-01T07:46:02.363 回答