如何将文件的内容作为响应发送回 apache camel?
How to send the contents of a file as a response back in apache camel?
我休息 api 使用 apache camel。当我在路由上点击 post 请求时,它应该从 S3 获取文件并将文件的内容作为响应发送回来。我正在发送 json 数据(文件名、bucketName、accesskey、secretkey、区域)以便从 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®ion=INSERT&operation=getObject")
.to("file:/tmp/")
.endRest();
}
现在我想发送文件的内容作为响应,而不是 .to("file:/tmp/")
。我怎样才能在 apache camel 中做到这一点?
Camel 将组件的响应写回到响应中。因此,如果您删除最后一个路由 to("file:/tmp/")
,响应将返回文件内容。
但是,我不知道文件 AWS 会响应什么,但如果它不是您需要的,您可以在将其写入文件后创建一个处理器来读取文件和 return内容。类似于:
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®ion=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(....);
}
}
}
我休息 api 使用 apache camel。当我在路由上点击 post 请求时,它应该从 S3 获取文件并将文件的内容作为响应发送回来。我正在发送 json 数据(文件名、bucketName、accesskey、secretkey、区域)以便从 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®ion=INSERT&operation=getObject")
.to("file:/tmp/")
.endRest();
}
现在我想发送文件的内容作为响应,而不是 .to("file:/tmp/")
。我怎样才能在 apache camel 中做到这一点?
Camel 将组件的响应写回到响应中。因此,如果您删除最后一个路由 to("file:/tmp/")
,响应将返回文件内容。
但是,我不知道文件 AWS 会响应什么,但如果它不是您需要的,您可以在将其写入文件后创建一个处理器来读取文件和 return内容。类似于:
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®ion=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(....);
}
}
}