2014-11-14 40 views
0

如何使用文件組件上的fileName獲取apache駱駝來獲取多個文件。下面是我的路線:fileName檢索多個文件名

sftp://ftpserver:22/?username=blah&password=blah&stepwise=false&useList=false&ignoreFileNotFoundOrPermissionError=true&fileName=${file:onlyname.noext}.txt&delete=true&doneFileName=done")

是FTP服務器上的文件是1.txt2.txt3.txt。我如何檢索所有這些文件而無需執行固定的fileNamefileName=3.txt

回答

1

您可以使用fileName中的Simple expression language來提供名稱模式。在舊文檔頁面上有一些例子http://camel.apache.org/file-language.html

在你的情況下,它應該足以使用fileName=*.txt

+0

添加此路由 - > sftp://myftp.com:22 /?username = test&password = test&fileName = * .txt。&delete = true&doneFileName = done - >不起作用。似乎我不能讓它工作,除非它是一個固定的字符串。當駱駝做一個目錄列表時,sftp服務器給我一個錯誤,這就是爲什麼我要給它一個固定文件名列表。 – user301693

+0

@ user301693你是對的,我正在考慮一個特殊情況,我使用簡單的語言來創建一個複雜的動態文件名。 @Peter有正確的答案,你必須在正則表達式中使用'include'。 – cringe

1

使用include選項,如:

include=.*\\.txt 

include使用Java正則表達式。

或者,您也可以使用antInclude

antInclude=*.txt 

編輯:

antInclude可能包含多個文件名:

antInclude=1.txt,2.txt 

(至少這適用於本地文件)

編輯:

如果不允許列出FTP服務器上,那麼你就必須設置爲每一個文件的路徑:

for (int i = 0; i < 10; i++) { 
    from("sftp://ftpserver:22/?fileName=${file:onlyname.noext}."+i+".txt") 
     ...; 
} 

但是,根據文件的數量,這不是我真正想做的事..

+0

這個或多或少是ftp調用在目錄上做列表後的過濾器。我試圖避免做一個清單,因爲我沒有權限。試圖告訴sftp只查找這些文件。 – user301693

+0

如果過濾不行,那麼你需要指定每個文件名,我猜。 –

+0

我想我的問題是我該怎麼做?你真的不能這樣做 - > fileName = 1.txt,2.txt,3.txt等...我也注意到你不能這樣做 - > fileName = * .txt - >任何想法? – user301693