java - Camel sftp 制作者。如何从单个处理器将多个文件放入不同的 sftp 文件夹

标签 java spring configuration sftp spring-camel

我使用 DSL 配置和 spring。

我的路线如下:

@Component
public class UploadRoutesDefinition extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("seda:rest_upload")
            .process(new Processor() {
                @Override
                public void process(Exchange exchange) {
                    ...
                    String sftPathForAdditionalFile = ....
                    String AdditionalFileContent = ...
                    ...
                }
             ).to(String.format(SFTP_BASE_URL,systemSettingsService.getSystemSettings().getSftpUserName(),
                    systemSettingsService.getSystemSettings().getSftpHost(),
                    systemSettingsService.getSystemSettings().getSftpPort(),
                    systemSettingsService.getSystemSettings().getSftpAttachmentsPushFailedPath(),
                    systemSettingsService.getSystemSettings().getSftpPassword()))

它允许我从 seda:rest_upload 读取文件,然后将其移动到 sftp 文件夹。

我想另外移动一个文件。我知道 process 方法中的路径和内容。

我怎样才能实现它?

更新

我当前的代码;

.process(new Processor() {
                @Override
                public void process(Exchange exchange) throws Exception {
                    exchange.getIn().setHeader("CamelFilename", "ololo.txt");
                    exchange.getIn().setBody(exchange.getProperty(PUSH_ERROR_MESSAGE, String.class).getBytes());
                    exchange.getIn().setHeader("destFilePath", sftpErrorFileTextPath);
                }
            })
            .to(String.format(SFTP_BASE_URL + "&fileExist=Append",
                    systemSettingsService.getSystemSettings().getSftpUserName(),
                    systemSettingsService.getSystemSettings().getSftpHost(),
                    systemSettingsService.getSystemSettings().getSftpPort(),
                    "${header.destFilePath}",
                    systemSettingsService.getSystemSettings().getSftpPassword()))
            .end();

最佳答案

这是一种方法,

@Override
public void configure() throws Exception {


from("seda:rest_upload")
 .multicast()
 .to("direct::sendMainFile")
 .to("direct:sendAnotherFile") // You could also use seda:
 .end();



from("direct:sendMainFile")
.process(new Processor() {
 @Override
      public void process(Exchange exchange) throws Exception {
        String filepath = <calculate filepath>;
        String completeFilePath = systemSettingsService.getSystemSettings().getSftpAttachmentsPushFailedPath() + filepath
        exchange.getIn().setHeader("destFilePath", completeFilePath);
         exchange.getIn().setHeader("CamelFileName", fileNameforMainFile);
    }
 }.toD(sftpRoute()) // It is toD not to


from("direct:sendAnotherfile")
.process(new Processor() {
          @Override
          public void process(Exchange exchange) throws Exception {
            // Here you have the same body which was sent from rest_upload
            // extract the info from exchange.getIn().getBody() 
            // Read the file and set it as exchange body

            String fileContent = <Your logic to read file>
            exchange.getIn().setBody(fileContent);
            exchange.getIn().setHeader("CamelFileName", fileNameforYourAdditionalFile)

            String completeFilePath = systemSettingsService.getSystemSettings().getSftpAttachmentsPushFailedPath() + filepath
            exchange.getIn().setHeader("destFilePath", completeFilePath);
          }
        })
 .toD(sftpRoute());  // It is toD not to

}    

private String sftpRoute() {

 return String.format(SFTP_BASE_URL,systemSettingsService.getSystemSettings().getSftpUserName(),               
  systemSettingsService.getSystemSettings().getSftpHost(),
  systemSettingsService.getSystemSettings().getSftpPort(),
                "${header.destFilePath}",                  
  systemSettingsService.getSystemSettings().getSftpPassword())
  }
 }

关于java - Camel sftp 制作者。如何从单个处理器将多个文件放入不同的 sftp 文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49446334/

相关文章:

node.js - 在永远的 JS 配置文件中指定日志记录选项

ssl - Tomcat8 SSL 连接器

java - 发送带有附件的邮件 - angularJS + Java Spring

spring - 如何使用 XML 模式来验证由 JAXB 编码的 @ResponseBody

Java:不支持的内容编码:text/xml posting text/xml

Java SWT : remove selection of a tree item

java - 如何找到列表包含另一个列表中的所有元素?

asp.net - 停止从 IIS 7.5 中的父 ASP.NET 应用程序继承 web.config

java - 对方付费电话要 map 吗?

java - Hibernate 使用条件执行更新