在使用SFTP文件时无法创建新的本地工作文件

时间:2015-07-16 14:04:24

标签: java apache-camel sftp camel-ftp

我正在使用骆驼版2.15.2

我有一个端点

data:[29.9, 71.5, 106.4, 129.2, 144.0,{y:176.0,dataLabels:{enabled:true}}]

我执行以下操作从SFTP中获取指定文件

final String endpoint = "sftp://myUsername@$myHost:22/test-dir/?connectTimeout=5000&password=MySuperSecretPassword&ignoreFileNotFoundOrPermissionError=false&fileName=FABT_Index_DE.xls&delete=false&localWorkDirectory=/test-dir/

当我在我的电脑上启动我的应用程序(OS = Windows)时...一切都很好。该文件从SFTP获取。我认为测试是一个好主意,如果应用程序在另一台机器上运行...所以我将我的jar复制到SFTP(OS = linux)并在那里运行...(它与文件所在的机器相同)放置)

现在我得到以下例外:

  @Autowired
  private CamelContext camelContext;

  ...some Stuff...

  private Exchange fetchFile(final String enpoint, final long timeout) {
        final ConsumerTemplate consumer = camelContext.createConsumerTemplate();
        return consumer.receive(endpoint, timeout);
  }

有谁可以告诉我为什么我得到这个例外 - 而不是从SFTP获取文件?

1 个答案:

答案 0 :(得分:0)

我发现了以下内容:

我用端点和local-working-directory使用相同的String test-dir。在一些实验之后,似乎对于端点定义

  • final String endpoint = "sftp://myUsername@$myHost:22/test-dir/?connect ...

test-dir是相对路径。例如此目录位于/vol/usr/home/MyTestUser/test-dir/vol/usr/home/myUsername/是SFTP用户的主目录(或通过ssh登录时获得的目录) - 可以定义端点与/test-dir/

但是对于选项localWorkDirectory

  • final String endpoint = " ... &localWorkDirectory=/test-dir/ ..."

似乎test-dir是绝对路径。因为我尝试在SFTP上运行应用程序,所以我没有权限写入绝对目录/test-dir/所以我将此目录更改为/vol/usr/home/myUsername/MyTempDirectory/并添加选项&stepwise=false。现在它起作用了。端点现在是:

final String endpoint = "sftp://myUsername@myHost:22/test-dir/connectTimeout=5000&password=MySuperSecretPassword&ignoreFileNotFoundOrPermissionError=false&fileName=FABT_Index_DE.xls&delete=false&localWorkDirectory=/vol/usr/home/myUsername/MyTempDirectory/&stepwise=false";

也许有人可以更准确地澄清它......