參考:https://blog.csdn.net/tiantian12234/article/details/77942598
不支持絕對路徑。駱駝通過修剪所有的前斜線將絕對路徑轉換爲相對路徑directoryname
。日誌中將顯示警告消息。
Maven用戶將需要爲其組件添加以下依賴項pom.xml
:
<span style="color:#333333"><span style="color:#585ac2"><code class="language-xml"><span style="color:navy"><<span style="color:navy">dependency</span>></span>
<span style="color:navy"><<span style="color:navy">groupId</span>></span>org.apache.camel<span style="color:navy"></<span style="color:navy">groupId</span>></span>
<span style="color:navy"><<span style="color:navy">artifactId</span>></span>camel-ftp<span style="color:navy"></<span style="color:navy">artifactId</span>></span>
<span style="color:navy"><<span style="color:navy">version</span>></span>x.x.x<span style="color:navy"></<span style="color:navy">version</span>></span>See the documentation of the Apache Commons
<span style="color:#999988"><em><!-- use the same version as your Camel core version --></em></span>
<span style="color:navy"></<span style="color:navy">dependency</span>></span></code></span></span>
URI格式
<span style="color:#333333"><span style="color:#585ac2"><code class="language-java">ftp:<span style="color:#999988"><em>//[username@]hostname[:port]/directoryname[?options]</em></span>
sftp:<span style="color:#999988"><em>//[username@]hostname[:port]/directoryname[?options]</em></span>
ftps:<span style="color:#999988"><em>//[username@]hostname[:port]/directoryname[?options]</em></span></code></span></span>
其中directoryname表示基礎目錄。目錄名稱是相對路徑。不支持絕對路徑。相對路徑可以包含嵌套文件夾,例如/ inbox / us。
autoCreate
支持該選項。使用方啓動時,在計劃輪詢之前,將執行其他FTP操作,以創建爲端點配置的目錄。其缺省值autoCreate
是true
。
如果未提供用戶名,則anonymous
嘗試不使用密碼登錄。
如果未提供端口號,則Camel將根據協議提供默認值(ftp = 21,sftp = 22,ftps = 2222)。
您可以按以下格式將查詢選項附加到URI, ?option=value&option=value&…
該組件使用兩個不同的庫來進行實際的FTP工作。FTP和FTPS使用Apache Commons Net,而SFTP使用JCraft JSCH。
FTPS(也稱爲FTP安全)是FTP的擴展,它添加了
支持傳輸層安全性(TLS)和安全套接字
層(SSL)加密協議。
URI選項
以下選項是FTP組件專用的。
FTP組件支持3個選項,如下所示。
名稱 | 描述 | 默認 | 類型 |
---|---|---|---|
basicPropertyBinding(高級) |
組件應使用基本屬性綁定(Camel 2.x)還是具有附加功能的較新屬性綁定 |
假 |
布爾值 |
lazyStartProducer(生產者) |
生產者是否應該開始懶惰(在第一個消息上)。通過延遲啓動,您可以使用它來允許CamelContext和路由啓動,以防生產者在啓動過程中否則可能失敗並導致路由啓動失敗。通過延遲啓動時間,可以在通過Camel的路由錯誤處理程序路由消息期間處理啓動失敗。請注意,當處理第一個消息時,創建並啓動生產者可能會花費一些時間,並會延長處理的總處理時間。 |
假 |
布爾值 |
bridgeErrorHandler(消費者) |
允許將使用者橋接到Camel路由錯誤處理程序,這意味着在使用者嘗試提取傳入消息或類似消息時發生的任何異常現在都將作爲消息處理,並由路由錯誤處理程序進行處理。默認情況下,使用者將使用org.apache.camel.spi.ExceptionHandler處理異常,這些異常將以WARN或ERROR級別記錄並被忽略。 |
假 |
布爾值 |
使用URI語法配置FTP端點:
ftp:主機:端口/目錄名稱
具有以下路徑和查詢參數:
路徑參數(3個參數):
名稱 | 描述 | 默認 | 類型 |
---|---|---|---|
主辦 |
FTP服務器的必需主機名 |
串 |
|
港口 |
FTP服務器的端口 |
整型 |
|
directoryName |
起始目錄 |
串 |
查詢參數(110個參數):
名稱 | 描述 | 默認 | 類型 |
---|---|---|---|
二進制(通用) |
指定文件傳輸模式,BINARY或ASCII。默認值爲ASCII(false)。 |
假 |
布爾值 |
字符集(常見) |
此選項用於指定文件的編碼。您可以在使用者上使用它來指定文件的編碼,從而使Camel知道在訪問文件內容的情況下應該加載文件內容的字符集。同樣,在寫入文件時,您可以使用此選項來指定也要寫入文件的字符集。請注意,在編寫文件時,Camel可能必須將消息內容讀入內存才能將數據轉換爲已配置的字符集,因此,如果您有大消息,請不要使用它。 |
串 |
|
斷開連接(常見) |
使用後是否立即斷開與遠程FTP服務器的連接。斷開連接只會斷開當前與FTP服務器的連接。如果您有要停止的使用者,則需要停止使用者/路線。 |
假 |
布爾值 |
doneFileName(常見) |
生產者:如果提供,那麼在原始文件被寫入後,駱駝將寫入第二完成文件。完成的文件將爲空。此選項配置要使用的文件名。您可以指定一個固定名稱。或者,您可以使用動態佔位符。完成的文件將始終與原始文件寫入相同的文件夾中。使用者:如果提供,則Camel僅在存在已完成文件的情況下才使用文件。此選項配置要使用的文件名。您可以指定一個固定名稱。或者,您可以使用動態佔位符。完成的文件總是與原始文件位於同一文件夾中。只支持\ $ {file.name}和\ $ {file.name.noext}作爲動態佔位符。 |
串 |
|
fileName(常見) |
使用諸如文件語言之類的表達式來動態設置文件名。對於使用者,它用作文件名過濾器。對於生產者,它用於評估要寫入的文件名。如果設置了表達式,則其優先級高於CamelFileName標頭。(注意:標頭本身也可以是一個表達式)。表達式選項同時支持字符串和表達式類型。如果表達式是字符串類型,則始終使用文件語言對其求值。如果表達式是表達式類型,則使用指定的表達式類型-例如,這允許您使用OGNL表達式。對於使用者,您可以使用它來過濾文件名,因此您可以使用文件語言語法例如mydata-\ $ {date:now:yyyyMMdd} .txt來使用今天的文件。生產者支持CamelOverruleFileName頭,該頭優先於任何現有的CamelFileName頭;CamelOverruleFileName是僅使用一次的標頭,它使它更容易,因爲它避免了臨時存儲CamelFileName並隨後必須將其還原。 |
串 |
|
PassiveMode(常見) |
設置被動模式連接。默認爲活動模式連接。 |
假 |
布爾值 |
分隔符(常見) |
設置要使用的路徑分隔符。UNIX =使用unix樣式路徑分隔符Windows =使用Windows樣式路徑分隔符Auto =(默認值)在文件名中使用現有路徑分隔符 |
UNIX系統 |
路徑分隔符 |
transferLoggingInterval秒(常見) |
配置記錄正在進行的上載和下載操作進度時使用的時間間隔(以秒爲單位)。當操作花費更長的時間時,這用於記錄進度。 |
5 |
整型 |
transferLoggingLevel(常見) |
配置在記錄上載和下載操作進度時使用的記錄級別。 |
調試 |
記錄級別 |
transferLoggingVerbose(常見) |
配置是否對上傳和下載操作的進度執行詳細(細粒度)日誌記錄。 |
假 |
布爾值 |
fastExistsCheck(常見) |
如果將此選項設置爲true,則camel- \ ftp將直接使用列表文件來檢查文件是否存在。由於某些FTP服務器可能不支持直接列出文件,因此,如果該選項爲false,則camel- \ ftp將使用舊方法列出目錄並檢查文件是否存在。此選項還會影響readLock = changed以控制它是否執行快速檢查以更新文件信息。如果FTP服務器上有很多文件,這可以用來加快處理過程。 |
假 |
布爾值 |
bridgeErrorHandler(消費者) |
允許將使用者橋接到Camel路由錯誤處理程序,這意味着在使用者嘗試提取傳入消息或類似消息時發生的任何異常現在都將作爲消息處理,並由路由錯誤處理程序進行處理。默認情況下,使用者將使用org.apache.camel.spi.ExceptionHandler處理異常,這些異常將以WARN或ERROR級別記錄並被忽略。 |
假 |
布爾值 |
刪除(消費者) |
如果爲true,則文件將在成功處理後被刪除。 |
假 |
布爾值 |
moveFailed(消費者) |
根據簡單語言設置移動失敗表達。例如,要將文件移動到.error子目錄,請使用:.error。注意:將文件移動到失敗位置時,Camel將處理錯誤,並且不會再次拾取文件。 |
串 |
|
無(消費者) |
如果爲true,則不會以任何方式移動或刪除文件。該選項適用於只讀數據或ETL類型要求。如果noop = true,Camel也將設置idempotent = true,以避免重複使用相同的文件。 |
假 |
布爾值 |
preMove(消費者) |
用於在處理之前移動文件名時動態設置文件名的表達式(例如文件語言)。例如,要將正在進行的文件移動到訂單目錄中,請將此值設置爲order。 |
串 |
|
preSort(消費者) |
啓用預排序後,使用者將在輪詢期間對從文件系統檢索到的文件和目錄名稱進行排序。如果您需要對文件進行排序,則可能需要這樣做。預排序是在使用者開始過濾之前執行的,並接受文件以供Camel處理。此選項爲default = false,表示已禁用。 |
假 |
布爾值 |
遞歸(消費者) |
如果是目錄,還將在所有子目錄中查找文件。 |
假 |
布爾值 |
簡歷下載(消費者) |
配置是否啓用恢復下載。FTP服務器必須支持此功能(幾乎所有FTP服務器都支持它)。另外,必須配置選項localWorkDirectory,以便將下載的文件存儲在本地目錄中,並且必須啓用選項二進制文件,這是支持恢復下載所必需的。 |
假 |
布爾值 |
sendEmptyMessageWhenIdle(消費者) |
如果輪詢使用者未輪詢任何文件,則可以啓用此選項以發送空消息(無正文)。 |
假 |
布爾值 |
streamDownload(消費者) |
設置不使用本地工作目錄時要使用的下載方法。如果設置爲true,則遠程文件在讀取時將流傳輸到路由。設置爲false時,將遠程文件加載到內存中,然後再發送到路由中。 |
假 |
布爾值 |
下載(消費者) |
FTP使用者是否應下載文件。如果將此選項設置爲false,則消息正文將爲null,但是使用者仍將觸發具有有關文件詳細信息(例如文件名,文件大小等)的Camel Exchange。只是文件不會被下載。 。 |
假 |
布爾值 |
exceptionHandler(消費者) |
讓使用者使用自定義的ExceptionHandler。請注意,如果啓用了選項bridgeErrorHandler,則該選項未使用。默認情況下,使用者將處理異常,這些異常將以WARN或ERROR級別記錄並被忽略。 |
異常處理程序 |
|
exchangePattern(消費者) |
消費者創建交換時設置交換模式。 |
交換模式 |
|
handleDirectoryParser AbsoluteResult(消費者) |
允許您設置如果目錄解析器以絕對路徑生成結果時使用者如何處理路徑中的子文件夾和文件。原因是某些FTP服務器可能會返回帶有絕對路徑的文件名,如果這樣,則FTP組件需要通過將返回的路徑轉換爲相對路徑來解決此問題。 |
假 |
布爾值 |
ignoreFileNotFoundOr PermissionError(消費者) |
是否忽略(由於試圖列出目錄中的文件或下載文件時)不存在或由於權限錯誤而忽略的時間。默認情況下,當目錄或文件不存在或權限不足時,將引發異常。將此選項設置爲true可以忽略它。 |
假 |
布爾值 |
inProgressRepository(消費者) |
可插入的正在進行的存儲庫org.apache.camel.spi.IdempotentRepository。進行中的存儲庫用於說明正在消耗的當前進行中的文件。默認情況下,使用基於內存的存儲庫。 |
冪等存儲庫 |
|
localWorkDirectory(消費者) |
使用時,可以使用本地工作目錄將遠程文件內容直接存儲在本地文件中,以避免將內容加載到內存中。如果您使用了很大的遠程文件,從而節省了內存,那麼這將是有益的。 |
串 |
|
onCompletionException處理程序(消費者) |
若要使用自定義org.apache.camel.spi.ExceptionHandler來處理在使用者完成提交或回滾的文件在完成過程中發生的任何引發的異常。默認實現將在WARN級別記錄任何異常並忽略。 |
異常處理程序 |
|
pollStrategy(消費者) |
可插入的org.apache.camel.PollingConsumerPollingStrategy允許您提供自定義實現,以控制通常在輪詢操作過程中發生的錯誤處理,而錯誤操作是在創建和路由Camel之前進行的。 |
輪詢消費者輪詢策略 |
|
processStrategy(消費者) |
可插入的org.apache.camel.component.file.GenericFileProcessStrategy,允許您實現自己的readLock選項或類似選項。當必須滿足特殊條件才能使用文件時,也可以使用它,例如存在特殊的就緒文件。如果設置了此選項,則readLock選項不適用。 |
GenericFileProcessStrategy |
|
useList(消費者) |
下載文件時是否允許使用LIST命令。默認爲true。在某些情況下,您可能要下載特定文件,並且不允許使用LIST命令,因此可以將此選項設置爲false。請注意,使用此選項時,要下載的特定文件不包含元數據信息,例如文件大小,時間戳,權限等,因爲只有在使用LIST命令時才能檢索這些信息。 |
真正 |
布爾值 |
fileExist(生產者) |
如果已經存在同名文件該怎麼辦。覆蓋是默認設置,它將替換現有文件。-附加-將內容添加到現有文件。-失敗-引發GenericFileOperationException,指示已經存在一個文件。-忽略-靜默忽略該問題,不覆蓋現有文件,但假定一切正常。-移動-選項還需要使用moveExisting選項進行配置。選項eagerDeleteTargetFile可用於控制在移動文件並且已經存在現有文件的情況下的處理方式,否則會導致移動操作失敗。在寫入目標文件之前,“移動”選項將移動所有現有文件。-TryRename僅在使用tempFileName選項時適用。這樣可以嘗試將文件從臨時名稱重命名爲實際名稱,不做任何存在檢查。在某些文件系統,尤其是FTP服務器上,此檢查可能會更快。 |
覆寫 |
GenericFileExist |
展平(生產者) |
Flatten用於展平文件名路徑以去除所有前導路徑,因此它只是文件名。這使您可以遞歸地使用子目錄,但是當您將文件寫入另一個目錄時,它們將被寫入單個目錄中。在生產者上將此設置爲true會強制刪除CamelFileName標頭中的所有文件名,以排除所有前導路徑。 |
假 |
布爾值 |
jailStartingDirectory(生產者) |
僅用於約束(限制)將文件寫入起始目錄(和子目錄)。默認情況下啓用此功能,不允許Camel將文件寫入外部目錄(開箱即用)。您可以關閉此選項以允許將文件寫入起始目錄之外的目錄,例如父文件夾或根文件夾。 |
真正 |
布爾值 |
lazyStartProducer(生產者) |
生產者是否應該開始懶惰(在第一個消息上)。通過延遲啓動,您可以使用它來允許CamelContext和路由啓動,以防生產者在啓動過程中否則可能失敗並導致路由啓動失敗。通過延遲啓動時間,可以在通過Camel的路由錯誤處理程序路由消息期間處理啓動失敗。請注意,當處理第一個消息時,創建並啓動生產者可能會花費一些時間,並會延長處理的總處理時間。 |
假 |
布爾值 |
moveExisting(生產者) |
表達式(例如文件語言),用於在配置fileExist = Move時計算要使用的文件名。要將文件移動到備份子目錄中,只需輸入backup。此選項僅支持以下文件語言標記:file:name,file:name.ext,file:name.noext,file:onlyname,file:onlyname.noext,file:ext和file:parent。請注意,FTP組件不支持file:parent,因爲FTP組件只能將任何現有文件移動到基於當前目錄爲基礎的相對目錄。 |
串 |
|
tempFileName(生產者) |
與tempPrefix選項相同,但由於它使用文件語言,因此提供了對臨時文件名命名的更精細控制。tempFilename的位置相對於選項'fileName'中的最終文件位置,而不是基本uri中的目標目錄。例如,如果選項fileName包含目錄前綴:dir / finalFilename,則tempFileName相對於該子目錄dir。 |
串 |
|
tempPrefix(生產者) |
此選項用於使用臨時名稱寫入文件,然後在寫入完成後將其重命名爲真實名稱。可以用於標識正在寫入的文件,也可以避免使用者(不使用排他讀取鎖)讀取正在進行的文件。FTP在上傳大文件時經常使用。 |
串 |
|
allowNullBody(生產者) |
用於指定在文件寫入期間是否允許使用空主體。如果設置爲true,則將創建一個空文件,當設置爲false時,將嘗試向文件組件發送空正文,GenericFileWriteException爲“無法將空正文寫入文件”。將被拋出。如果fileExist選項設置爲'Override',則文件將被截斷,如果設置爲追加,則文件將保持不變。 |
假 |
布爾值 |
chmod(生產者) |
允許您在存儲的文件上設置chmod。例如chmod = 640。 |
串 |
|
offlineOnBatchComplete(生產者) |
批量上傳完成後是否立即斷開與遠程FTP服務器的連接。detachOnBatchComplete將僅斷開與FTP服務器的當前連接。 |
假 |
布爾值 |
eagerDeleteTargetFile(生產者) |
是否急切刪除任何現有目標文件。僅當您使用fileExists = Override和tempFileName選項時,此選項才適用。您可以使用它來禁用(將其設置爲false)在寫入臨時文件之前刪除目標文件。例如,您可能編寫了大文件,並希望目標文件在臨時文件寫入過程中存在。這樣可以確保僅在將臨時文件重命名爲目標文件名之前的最後一刻才刪除目標文件。此選項還用於控制在啓用fileExist = Move並且存在現有文件時是否刪除任何現有文件。如果此選項copyAndDeleteOnRenameFails爲false,則如果存在現有文件,則將引發異常;如果爲true,則將在移動操作之前刪除現有文件。 |
真正 |
布爾值 |
keepLastModified(生產者) |
將保留源文件中最後修改的時間戳(如果有)。將使用Exchange.FILE_LAST_MODIFIED標頭來定位時間戳。此標頭可以包含java.util.Date或帶時間戳的long。如果時間戳存在並且啓用了該選項,它將在寫入文件上設置該時間戳。注意:此選項僅適用於文件生產者。您不能對任何\ ftp生產者使用此選項。 |
假 |
布爾值 |
moveExistingFileStrategy(生產者) |
策略(自定義策略),用於移動帶有特殊命名標記的文件,以便在配置fileExist = Move時使用。默認情況下,如果未提供自定義策略,則使用一個實現 |
FileMoveExistingStrategy |
|
sendNoop(生產者) |
在將文件上傳到FTP服務器之前是否發送noop命令作爲預寫檢查。默認情況下啓用此選項,因爲對連接的驗證仍然有效,這允許靜默重新連接以便能夠上載文件。但是,如果這引起問題,則可以關閉此選項。 |
真正 |
布爾值 |
activePortRange(高級) |
將客戶端端口範圍設置爲活動模式。語法爲:minPort-maxPort兩個端口號都包含在內,例如10000-19999以包括所有1xxxx端口。 |
串 |
|
自動創建(高級) |
在文件的路徑名中自動創建缺少的目錄。對於文件使用者,這意味着創建起始目錄。對於文件生產者,這意味着應該將文件寫入的目錄。 |
真正 |
布爾值 |
basicPropertyBinding(高級) |
端點應使用基本屬性綁定(Camel 2.x)還是具有附加功能的較新屬性綁定 |
假 |
布爾值 |
bufferSize(高級) |
用於寫入文件的緩衝區大小(以字節爲單位)(如果使用FTP下載和上傳文件,則以字節爲單位)。 |
131072 |
整型 |
connectTimeout(高級) |
設置等待連接建立的連接超時,由FTPClient和JSCH使用 |
10000 |
整型 |
ftpClient(高級) |
使用FTPClient的自定義實例 |
FTP客戶端 |
|
ftpClientConfig(高級) |
要使用FTPClientConfig的自定義實例來配置端點應使用的FTP客戶端。 |
FTP客戶端配置 |
|
ftpClientConfigParameters(高級) |
由FtpComponent使用以爲FTPClientConfig提供其他參數 |
地圖 |
|
ftpClientParameters(高級) |
由FtpComponent使用以爲FTPClient提供其他參數 |
地圖 |
|
maximumReconnectAttempts(高級) |
指定Camel嘗試連接到遠程FTP服務器時執行的最大重新連接嘗試次數。使用0禁用此行爲。 |
整型 |
|
reconnectDelay(高級) |
延遲毫秒後,駱駝會在嘗試重新連接之前等待。 |
長 |
|
siteCommand(高級) |
設置在成功登錄後執行的可選站點命令。可以使用換行符分隔多個站點命令。 |
串 |
|
soTimeout(高級) |
爲Camel 2.4設置so超時FTP和FTPS。從SFTP for Camel 2.14.3 / 2.15.3 / 2.16開始。是SocketOptions.SO_TIMEOUT的值,以毫秒爲單位。推薦的選項是將此值設置爲300000,以使它沒有掛起的連接。在SFTP上,此選項在JSCH會話實例上設置爲超時。 |
300000 |
整型 |
逐步(高級) |
設置在下載文件時或遍歷文件結構時遍歷文件結構時是否應該逐步更改目錄。例如,由於安全原因而無法更改FTP服務器上的目錄時,可以禁用此功能。 |
真正 |
布爾值 |
同步(高級) |
設置是否應嚴格使用同步處理,還是允許Camel使用異步處理(如果支持)。 |
假 |
布爾值 |
throwExceptionOnConnect失敗(高級) |
如果連接失敗(已用盡),則應引發異常。默認情況下,不引發異常並記錄WARN。您可以使用此方法啓用引發異常並處理org.apache.camel.spi.PollingConsumerPollStrategy回滾方法中引發的異常。 |
假 |
布爾值 |
超時(高級) |
設置等待應答的數據超時,僅由FTPClient使用 |
30000 |
整型 |
antExclude(過濾器) |
螞蟻樣式過濾器排除。如果同時使用antInclude和antExclude,則antExclude優先於antInclude。可以用逗號分隔的格式指定多個排除項。 |
串 |
|
antFilterCaseSensitive(過濾器) |
在螞蟻過濾器上設置區分大小寫的標誌 |
真正 |
布爾值 |
antInclude(過濾器) |
包含螞蟻樣式的過濾器。可以用逗號分隔的格式指定多個包含。 |
串 |
|
eagerMaxMessagesPerPoll(過濾器) |
允許控制maxMessagesPerPoll的限制是否急切。如果渴望,則限制是在文件掃描期間。如果爲false,則將掃描所有文件,然後執行排序。將此選項設置爲false允許首先對所有文件進行排序,然後限制輪詢。請注意,這需要更高的內存使用量,因爲所有文件詳細信息都在內存中才能執行排序。 |
真正 |
布爾值 |
排除(過濾器) |
如果文件名與正則表達式模式匹配(用於區分大小寫),則用於排除文件。請注意,如果您使用加號等符號,並且將其配置爲端點uri,則需要使用RAW()語法進行配置。在配置端點uri時查看更多詳細信息 |
串 |
|
過濾器(filter) |
可插入過濾器,作爲org.apache.camel.component.file.GenericFileFilter類。如果filter在accept()方法中返回false,將跳過文件。 |
通用文件過濾器 |
|
filterDirectory(過濾器) |
根據簡單語言過濾目錄。例如,要過濾當前日期,可以使用簡單的日期模式,例如\ $ {date:now:yyyMMdd} |
串 |
|
filterFile(過濾器) |
根據簡單語言過濾文件。例如,要過濾文件大小,可以使用\ $ {file:size} 5000 |
串 |
|
冪等(過濾器) |
選擇使用冪等消費者EIP模式讓Camel跳過已經處理的文件。默認情況下,將使用可容納1000個條目的基於內存的LRUCache。如果noop = true,則將啓用冪等,以避免重複使用相同的文件。 |
假 |
布爾型 |
idempotentKey(過濾器) |
使用自定義冪等鍵。默認情況下,使用文件的絕對路徑。您可以使用文件語言,例如使用文件名和文件大小,可以執行以下操作:idempotentKey = \ $ {file:name}-\ $ {file:size} |
串 |
|
idempotentRepository(過濾器) |
可插拔的存儲庫org.apache.camel.spi.IdempotentRepository,如果未指定任何存儲庫且冪等爲true,則默認情況下使用MemoryMessageIdRepository。 |
冪等存儲庫 |
|
包含(過濾器) |
如果文件名與正則表達式模式匹配(用於區分大小寫),則用於包含文件。請注意,如果您使用加號等符號,並且將其配置爲端點uri,則需要使用RAW()語法進行配置。在配置端點uri時查看更多詳細信息 |
串 |
|
maxDepth(過濾器) |
遞歸處理目錄時要遍歷的最大深度。 |
2147483647 |
整型 |
maxMessagesPerPoll(過濾器) |
定義每次輪詢收集的最大消息數。默認情況下,未設置最大值。可以用來設置例如1000的限制,以避免在啓動服務器時有成千上萬個文件。將值設置爲0或負數可將其禁用。注意:如果使用此選項,則在進行任何排序之前,文件和FTP組件將受到限制。例如,如果您有100000個文件並使用maxMessagesPerPoll = 500,則僅將提取前500個文件,然後進行排序。您可以使用eagerMaxMessagesPerPoll選項並將其設置爲false以允許先掃描所有文件,然後再進行排序。 |
整型 |
|
minDepth(過濾器) |
遞歸處理目錄時開始處理的最小深度。使用minDepth = 1表示基本目錄。使用minDepth = 2表示第一個子目錄。 |
整型 |
|
移動(過濾器) |
用於在處理後移動文件名時動態設置文件名的表達式(例如“簡單語言”)。要將文件移動到.done子目錄,只需輸入.done。 |
串 |
|
ExclusiveReadLockStrategy(鎖定) |
可插入的讀鎖作爲org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy實現。 |
GenericFileExclusiveReadLockStrategy |
|
readLock(鎖定) |
使用者使用,僅在文件具有獨佔讀鎖定(即文件不在進行中或未被寫入)時才輪詢文件。駱駝將等待,直到授予文件鎖定。此選項提供了內置策略:-無-未使用讀鎖-markerFile-Camel創建一個標記文件(fileName.camelLock),然後對其保持鎖。該選項不適用於FTP組件-已更改-已更改是使用文件長度/修改時間戳來檢測當前是否正在複製文件。至少需要1秒鐘來確定,所以此選項不能像其他文件一樣快地消耗文件,但是可以更可靠,因爲JDK IO API不能始終確定文件是否正在被另一個進程使用。選項readLockCheckInterval可用於設置檢查頻率。-fileLock-用於使用java.nio.channels.FileLock。該選項不適用於Windows操作系統和FTP組件。通過掛載/共享訪問遠程文件系統時,應避免這種方法,除非該文件系統支持分佈式文件鎖。-重命名-重命名是用於嘗試重命名文件以測試是否可以獲取獨佔讀鎖。-idempotent-(僅用於文件組件)idempotent用於將idempotentRepository用作讀取鎖。如果冪等存儲庫實現支持集羣,則允許使用支持集羣的讀取鎖。-idempotent-changed-(僅用於文件組件)idempotent-changed用於使用idempotentRepository,並更改爲組合的讀鎖。如果冪等存儲庫實現支持集羣,則允許使用支持集羣的讀取鎖。-idempotent-rename-(僅用於文件組件)idempotent-rename用於使用idempotentRepository並將其重命名爲組合的讀鎖。如果冪等存儲庫實現支持集羣,則允許使用支持集羣的讀取鎖。注意:各種讀取鎖並不都適合在集羣模式下工作,在集羣模式下,不同節點上的併發使用者正在爭用共享文件系統上的相同文件。markerFile使用接近原子的操作來創建空的標記文件,但是不能保證它可以在集羣中工作。fileLock可能會更好地工作,但是文件系統需要支持分佈式文件鎖,依此類推。如果冪等存儲庫支持羣集(例如,Hazelcast Component或Infinispan),則使用冪等讀鎖定可以支持羣集。 |
沒有 |
串 |
readLockCheckInterval(鎖定) |
讀鎖的間隔(以毫秒爲單位)(如果讀鎖支持)。該間隔用於嘗試獲取讀鎖之間的休眠。例如,當使用更改的讀取鎖定時,可以設置較大的間隔時間以適應緩慢的寫入。默認值爲1秒。如果生產者寫文件的速度很慢,則可能會太快。注意:對於FTP,默認的readLockCheckInterval爲5000。readLockTimeout值必須大於readLockCheckInterval,但是根據經驗,超時至少要比readLockCheckInterval高2倍或更多倍。這是爲了確保在鎖定超時之前允許讀取鎖定進程嘗試獲取鎖的時間,以便嘗試抓住該鎖定。 |
1000 |
長 |
readLockDeleteOrphanLock文件(鎖定) |
如果沒有正確關閉Camel(例如JVM崩潰),則在啓動時是否應刪除帶有標記文件的讀取鎖,否則應刪除文件系統上可能留有的所有孤立讀取鎖文件。如果將此選項設置爲false,則任何孤立的鎖定文件都將導致Camel不嘗試提取該文件,這也可能是由於另一個節點正在從同一共享目錄中同時讀取文件。 |
真正 |
布爾值 |
readLockLoggingLevel(鎖定) |
無法獲取讀鎖時使用的日誌記錄級別。默認情況下,將記錄調試。您可以更改此級別,例如將其更改爲“關閉”以不進行任何日誌記錄。此選項僅適用於類型爲readLock的readLock:更改,fileLock,冪等,冪等更改,idempotent重命名,重命名。 |
調試 |
記錄級別 |
readLockMarkerFile(鎖定) |
是否將標記文件與已更改,重命名或排他讀取鎖定類型一起使用。默認情況下,還會使用標記文件來防止其他進程拾取相同文件。可以通過將此選項設置爲false來關閉此行爲。例如,如果您不想通過Camel應用程序將標記文件寫入文件系統。 |
真正 |
布爾值 |
readLockMinAge(鎖定) |
此選項僅適用於readLock = changed。它允許指定嘗試獲取讀鎖之前文件必須達到的最小期限。例如,使用readLockMinAge = 300s要求文件至少存在5分鐘。這樣可以加快更改後的讀取鎖定的速度,因爲它只會嘗試獲取至少給定使用期限的文件。 |
0 |
長 |
readLockMinLength(鎖定) |
此選項僅適用於readLock = changed。它允許您配置最小文件長度。默認情況下,Camel期望文件包含數據,因此默認值爲1。您可以將此選項設置爲零,以允許使用零長度的文件。 |
1個 |
長 |
readLockRemoveOnCommit(鎖定) |
此選項僅適用於readLock =冪等。它允許指定在成功處理文件併發生提交時是否從冪等存儲庫中刪除文件名條目。默認情況下,不會刪除該文件,以確保不會發生任何競爭條件,因此另一個活動節點可能會嘗試獲取該文件。相反,冪等存儲庫可能支持逐出策略,您可以將其配置爲在X分鐘後逐出文件名條目-這樣可以確保競爭條件不會出現問題。在readLockIdempotentReleaseDelay選項中查看更多詳細信息。 |
假 |
布爾值 |
readLockRemoveOnRollback(鎖定) |
此選項僅適用於readLock =冪等。它允許指定在處理文件失敗併發生回滾時是否從冪等存儲庫中刪除文件名條目。如果此選項爲false,那麼將確認文件名條目(就像文件已提交一樣)。 |
真正 |
布爾值 |
readLockTimeout(鎖定) |
如果讀鎖支持,則可選的超時值(以毫秒爲單位)。如果無法授予讀取鎖並且觸發了超時,則Camel將跳過該文件。在下一次輪詢Camel時,將再次嘗試該文件,這一次也許可以授予讀取鎖定。使用0或更低的值表示永遠。當前fileLock,已更改和重命名支持超時。注意:對於FTP,默認的readLockTimeout值爲20000,而不是10000。readLockTimeout值必須大於readLockCheckInterval,但是根據經驗,超時至少要比readLockCheckInterval高2倍或更多倍。這是爲了確保在鎖定超時之前允許讀取鎖定進程嘗試獲取鎖的時間,以便嘗試抓住該鎖定。 |
10000 |
長 |
backoffErrorThreshold(調度程序) |
在backoffMultipler插入之前應該發生的後續錯誤輪詢的數量(由於某些錯誤而失敗)。 |
整型 |
|
backoffIdleThreshold(調度程序) |
在backoffMultipler踢入之前應該發生的後續空閒輪詢的數量。 |
整型 |
|
backoffMultiplier(調度程序) |
如果連續出現多個隨後的空閒/錯誤,則讓計劃的輪詢使用者退回。乘數就是在下一次實際嘗試再次發生之前將被跳過的輪詢次數。使用此選項時,還必須配置backoffIdleThreshold和/或backoffErrorThreshold。 |
整型 |
|
延遲(調度程序) |
下次輪詢之前的毫秒數。您還可以使用單位指定時間值,例如60s(60秒),5m30s(5分鐘30秒)和1h(1小時)。 |
500 |
長 |
貪心(調度程序) |
如果啓用了貪婪功能,則如果上一次運行輪詢了1條或更多消息,則ScheduledPollConsumer將立即再次運行。 |
假 |
布爾值 |
initialDelay(調度程序) |
第一次輪詢開始前的毫秒數。您還可以使用單位指定時間值,例如60s(60秒),5m30s(5分鐘30秒)和1h(1小時)。 |
1000 |
長 |
repeatCount(調度程序) |
指定最大射擊次數限制。因此,如果將其設置爲1,則調度程序將僅觸發一次。如果將其設置爲5,則只會觸發五次。零或負值表示永遠開火。 |
0 |
長 |
runLoggingLevel(計劃程序) |
使用者在輪詢時記錄開始/完成日誌行。此選項使您可以爲此配置日誌記錄級別。 |
跟蹤 |
記錄級別 |
cheduledExecutorService(調度程序) |
允許配置供使用者使用的自定義/共享線程池。默認情況下,每個使用者都有其自己的單線程線程池。 |
ScheduledExecutorService |
|
調度程序(調度程序) |
從駱駝彈簧或駱駝石英組件使用cron計劃程序 |
沒有 |
串 |
schedulerProperties(調度程序) |
要在使用自定義調度程序或任何基於Spring的Quartz調度程序時配置其他屬性。 |
地圖 |
|
startScheduler(調度程序) |
調度程序是否應自動啓動。 |
真正 |
布爾值 |
timeUnit(調度程序) |
initialDelay和delay選項的時間單位。 |
千里眼 |
時間單位 |
useFixedDelay(計劃程序) |
控制是否使用固定延遲或固定速率。有關詳細信息,請參見JDK中的ScheduledExecutorService。 |
真正 |
布爾值 |
隨機播放(排序) |
隨機播放文件列表(以隨機順序排序) |
假 |
布爾值 |
sortBy(排序) |
使用文件語言的內置排序。支持嵌套排序,因此您可以按文件名進行排序,並作爲第二組按修改日期進行排序。 |
串 |
|
分類器(排序) |
可插入排序器,作爲java.util.Comparator類。 |
比較器 |
|
帳戶(安全) |
用於登錄的帳戶 |
串 |
|
密碼(安全性) |
登錄密碼 |
串 |
|
用戶名(安全性) |
用於登錄的用戶名 |
串 |
SPRING BOOT自動配置
使用Spring Boot時,請確保使用以下Maven依賴項來支持自動配置:
<span style="color:#333333"><span style="color:#585ac2"><code class="language-xml"><span style="color:navy"><<span style="color:navy">dependency</span>></span>
<span style="color:navy"><<span style="color:navy">groupId</span>></span>org.apache.camel.springboot<span style="color:navy"></<span style="color:navy">groupId</span>></span>
<span style="color:navy"><<span style="color:navy">artifactId</span>></span>camel-ftp-starter<span style="color:navy"></<span style="color:navy">artifactId</span>></span>
<span style="color:navy"><<span style="color:navy">version</span>></span>x.x.x<span style="color:navy"></<span style="color:navy">version</span>></span>
<span style="color:#999988"><em><!-- use the same version as your Camel core version --></em></span>
<span style="color:navy"></<span style="color:navy">dependency</span>></span></code></span></span>
該組件支持4個選項,如下所示。
名稱 | 描述 | 默認 | 類型 |
---|---|---|---|
camel.component.ftp.basic-property-binding |
組件應使用基本屬性綁定(Camel 2.x)還是具有附加功能的較新屬性綁定 |
假 |
布爾型 |
camel.component.ftp.bridge-error-handler |
允許將使用者橋接到Camel路由錯誤處理程序,這意味着在使用者嘗試提取傳入消息或類似消息時發生的任何異常現在都將作爲消息處理,並由路由錯誤處理程序進行處理。默認情況下,使用者將使用org.apache.camel.spi.ExceptionHandler處理異常,這些異常將以WARN或ERROR級別記錄並被忽略。 |
假 |
布爾型 |
camel.component.ftp.enabled |
是否啓用\ ftp組件的自動配置。默認情況下啓用。 |
布爾型 |
|
camel.component.ftp.lazy-start-producer |
生產者是否應該開始懶惰(在第一個消息上)。通過延遲啓動,您可以使用它來允許CamelContext和路由啓動,以防生產者在啓動過程中否則可能失敗並導致路由啓動失敗。通過延遲啓動時間,可以在通過Camel的路由錯誤處理程序路由消息期間處理啓動失敗。請注意,當處理第一個消息時,創建並啓動生產者可能會花費一些時間,並會延長處理的總處理時間。 |
假 |
布爾型 |
FTPS組件默認信任庫
在ftpClient.
FTPS組件中使用與SSL相關的屬性時,信任存儲區將接受所有證書。如果只需要信任選擇證書,則必須使用ftpClient.trustStore.xxx
選項或通過配置custom 來配置信任庫ftpClient
。
使用時sslContextParameters
,信任庫由提供的SSLContextParameters實例的配置管理。
您可以使用或前綴直接在URI ftpClient
和上配置其他選項。ftpClientConfig
ftpClient.
ftpClientConfig.
例如設定setDataTimeout
在FTPClient
30秒,你可以這樣做:
<span style="color:#333333"><span style="color:#585ac2"><code class="language-java">from(<span style="color:#dd1144">"ftp://foo@myserver?password=secret&ftpClient.dataTimeout=30000"</span>).to(<span style="color:#dd1144">"bean:foo"</span>);</code></span></span>
您可以混合使用兩個前綴,例如配置日期格式或時區。
<span style="color:#333333"><span style="color:#585ac2"><code class="language-java">from(<span style="color:#dd1144">"ftp://foo@myserver?password=secret&ftpClient.dataTimeout=30000&ftpClientConfig.serverLanguageCode=fr"</span>).to(<span style="color:#dd1144">"bean:foo"</span>);</code></span></span>
您可以根據需要選擇任意多個選項。
有關可能的選項和更多詳細信息,請參見Apache Commons FTP FTPClientConfig的文檔。以及Apache Commons FTP FTPClient。
如果您不喜歡在URL中進行大量配置,則可以通過在註冊表中進行駱駝查找來引用ftpClient
或ftpClientConfig
使用。
例如:
<span style="color:#333333"><span style="color:#585ac2"><code class="language-java"> <bean id=<span style="color:#dd1144">"myConfig"</span> <span style="color:#333333">class</span>=<span style="color:#dd1144">"org.apache.commons.net.ftp.FTPClientConfig"</span>>
<property name=<span style="color:#dd1144">"lenientFutureDates"</span> value=<span style="color:#dd1144">"true"</span>/>
<property name=<span style="color:#dd1144">"serverLanguageCode"</span> value=<span style="color:#dd1144">"fr"</span>/>
</bean></code></span></span>
然後,當您在URL中使用#表示法時,讓Camel查找該bean。
<span style="color:#333333"><span style="color:#585ac2"><code class="language-java">from(<span style="color:#dd1144">"ftp://foo@myserver?password=secret&ftpClientConfig=#myConfig"</span>).to(<span style="color:#dd1144">"bean:foo"</span>);</code></span></span>
例子
ftp://[email protected]/public/upload/images/holiday2008?password = secret&binary = true
ftp://[email protected]:12049 / reports / 2008 / password = secret&binary = false
ftp://publicftpserver.com/download
併發
FTP使用者不支持併發
FTP使用者(具有相同的端點)不支持併發(後備FTP客戶端不是線程安全的)。
您可以使用多個FTP使用者從不同的端點進行輪詢。它只是一個不支持併發使用者的端點。
該FTP製片人並沒有這個問題,它支持併發。
更多信息
該組件是File組件的擴展。因此,“文件組件”頁面上有更多示例和詳細信息。
使用文件時的默認值
默認情況下,FTP使用者將在遠程FTP服務器上保留使用過的文件。如果要刪除文件或將其移動到其他位置,則必須對其進行顯式配置。例如,您可以用於delete=true
刪除文件,或用於move=.done
將文件移動到隱藏的完成子目錄中。
常規文件使用者不同,因爲默認情況下它將將文件移動到.camel
子目錄。默認情況下,Camel 對於FTP使用者不執行此操作的原因是,默認情況下,它可能缺少權限才能移動或刪除文件。
侷限性
選項readLock可用於強制Camel 不使用當前正在寫入的文件。但是,此選項默認情況下處於關閉狀態,因爲它要求用戶具有寫訪問權限。有關讀取鎖的更多詳細信息,請參見File2的選項表。
還有其他解決方案可以避免消耗當前正在通過FTP寫入的文件。例如,您可以寫入臨時目標並在寫入文件後移動它。
使用move
或preMove
選項移動文件時,文件僅限於FTP_ROOT文件夾。這樣可以防止您將文件移到FTP區域之外。如果要將文件移動到另一個區域,則可以使用軟鏈接並將文件移動到軟鏈接文件夾中。
郵件標題
以下消息頭可用於影響組件的行爲
標頭 | 描述 |
---|---|
|
指定當發送到端點時用於輸出消息的輸出文件名(相對於端點目錄)。如果不存在且也沒有表達式,則將生成的消息ID用作文件名。 |
|
寫入的輸出文件的實際文件路徑(路徑+名稱)。此標頭由Camel設置,其目的是向最終用戶提供所寫文件的名稱。 |
|
當前批次中消耗的文件總數中的當前索引。 |
|
此批次中消耗的文件總數。 |
|
遠程主機名。 |
|
本地工作文件的路徑(如果使用本地工作目錄)。 |
此外,FTP / FTPS使用者和生產者還將Message
使用以下標頭來豐富Camel
標頭 | 描述 |
---|---|
|
FTP客戶端回覆代碼(類型爲整數) |
|
FTP客戶端回覆字符串 |
關於超時
兩組庫(請參見頂部)具有用於設置超時的不同API。您可以使用它們的connectTimeout
選項以毫秒爲單位設置超時以建立網絡連接。soTimeout
也可以在FTP / FTPS上設置個人,這與使用相對應ftpClient.soTimeout
。注意SFTP將自動connectTimeout
用作其soTimeout
。該timeout
選項僅適用於FTP / FTPS作爲數據超時,與ftpClient.dataTimeout
值對應。所有超時值均以毫秒爲單位。
使用本地工作目錄
Camel支持使用遠程FTP服務器,並將文件直接下載到本地工作目錄中。這樣可以避免將整個遠程文件內容讀入內存,因爲使用可以將其直接流式傳輸到本地文件中FileOutputStream
。
Camel將以與遠程文件相同的名稱存儲到本地文件,儘管.inprogress
在下載文件時將其擴展名。之後,文件被重命名以刪除.inprogress
後綴。最後,當Exchange完成時,將刪除本地文件。
因此,如果要從遠程FTP服務器下載文件並將其存儲爲文件,則需要路由到文件端點,例如:
<span style="color:#333333"><span style="color:#585ac2"><code class="language-java">from(<span style="color:#dd1144">"ftp://[email protected]?password=secret&localWorkDirectory=/tmp"</span>).to(<span style="color:#dd1144">"file://inbox"</span>);</code></span></span>
===上面的路由非常高效,因爲它避免了將整個文件內容讀取到內存中。它將遠程文件直接下載到本地文件流。java.io.File 然後將句柄用作Exchange正文。文件生產者利用這一事實,可以直接在工作文件java.io.File 句柄上工作java.io.File.rename ,並對目標文件名執行a操作。正如Camel所知,它是本地工作文件,它可以優化並使用重命名而不是文件副本,因爲無論如何該工作文件都將被刪除。=== |
逐步更改目錄
在使用文件(例如下載)或生成文件(例如上傳)時,就目錄遍歷而言,駱駝FTP可以在兩種模式下運行
-
逐步地
-
不是逐步的
您可能要根據自己的情況和安全問題選擇其中一個。某些駱駝最終用戶只有在逐步使用的情況下才能下載文件,而其他駱駝最終用戶只有在不逐步使用的情況下才能下載。
您可以使用該stepwise
選項來控制行爲。
請注意,在大多數情況下,僅當用戶限於其主目錄並且主目錄報告爲時,纔可以逐步更改目錄"/"
。
最好用一個例子來說明兩者之間的區別。假設我們在遠程FTP服務器上具有以下目錄結構,我們需要遍歷和下載文件:
<span style="color:#333333"><span style="color:#585ac2"><code class="language-java">/
/one
/one/two
/one/two/sub-a
/one/two/sub-b</code></span></span>
並且我們在sub-a(a.txt)和sub-b(b.txt)文件夾中都有一個文件。
使用STEPWISE = TRUE(默認模式)
<span style="color:#333333"><span style="color:#585ac2"><code class="language-java">TYPE A
<span style="color:teal">200</span> Type set to A
PWD
<span style="color:teal">257</span> <span style="color:#dd1144">"/"</span> is current directory.
CWD one
<span style="color:teal">250</span> CWD successful. <span style="color:#dd1144">"/one"</span> is current directory.
CWD two
<span style="color:teal">250</span> CWD successful. <span style="color:#dd1144">"/one/two"</span> is current directory.
SYST
<span style="color:teal">215</span> UNIX emulated by FileZilla
PORT <span style="color:teal">127</span>,<span style="color:teal">0</span>,<span style="color:teal">0</span>,<span style="color:teal">1</span>,<span style="color:teal">17</span>,<span style="color:teal">94</span>
<span style="color:teal">200</span> Port command successful
LIST
<span style="color:teal">150</span> Opening data channel <span style="color:#333333">for</span> directory list.
<span style="color:teal">226</span> Transfer OK
CWD sub-a
<span style="color:teal">250</span> CWD successful. <span style="color:#dd1144">"/one/two/sub-a"</span> is current directory.
PORT <span style="color:teal">127</span>,<span style="color:teal">0</span>,<span style="color:teal">0</span>,<span style="color:teal">1</span>,<span style="color:teal">17</span>,<span style="color:teal">95</span>
<span style="color:teal">200</span> Port command successful
LIST
<span style="color:teal">150</span> Opening data channel <span style="color:#333333">for</span> directory list.
<span style="color:teal">226</span> Transfer OK
CDUP
<span style="color:teal">200</span> CDUP successful. <span style="color:#dd1144">"/one/two"</span> is current directory.
CWD sub-b
<span style="color:teal">250</span> CWD successful. <span style="color:#dd1144">"/one/two/sub-b"</span> is current directory.
PORT <span style="color:teal">127</span>,<span style="color:teal">0</span>,<span style="color:teal">0</span>,<span style="color:teal">1</span>,<span style="color:teal">17</span>,<span style="color:teal">96</span>
<span style="color:teal">200</span> Port command successful
LIST
<span style="color:teal">150</span> Opening data channel <span style="color:#333333">for</span> directory list.
<span style="color:teal">226</span> Transfer OK
CDUP
<span style="color:teal">200</span> CDUP successful. <span style="color:#dd1144">"/one/two"</span> is current directory.
CWD /
<span style="color:teal">250</span> CWD successful. <span style="color:#dd1144">"/"</span> is current directory.
PWD
<span style="color:teal">257</span> <span style="color:#dd1144">"/"</span> is current directory.
CWD one
<span style="color:teal">250</span> CWD successful. <span style="color:#dd1144">"/one"</span> is current directory.
CWD two
<span style="color:teal">250</span> CWD successful. <span style="color:#dd1144">"/one/two"</span> is current directory.
PORT <span style="color:teal">127</span>,<span style="color:teal">0</span>,<span style="color:teal">0</span>,<span style="color:teal">1</span>,<span style="color:teal">17</span>,<span style="color:teal">97</span>
<span style="color:teal">200</span> Port command successful
RETR foo.txt
<span style="color:teal">150</span> Opening data channel <span style="color:#333333">for</span> file transfer.
<span style="color:teal">226</span> Transfer OK
CWD /
<span style="color:teal">250</span> CWD successful. <span style="color:#dd1144">"/"</span> is current directory.
PWD
<span style="color:teal">257</span> <span style="color:#dd1144">"/"</span> is current directory.
CWD one
<span style="color:teal">250</span> CWD successful. <span style="color:#dd1144">"/one"</span> is current directory.
CWD two
<span style="color:teal">250</span> CWD successful. <span style="color:#dd1144">"/one/two"</span> is current directory.
CWD sub-a
<span style="color:teal">250</span> CWD successful. <span style="color:#dd1144">"/one/two/sub-a"</span> is current directory.
PORT <span style="color:teal">127</span>,<span style="color:teal">0</span>,<span style="color:teal">0</span>,<span style="color:teal">1</span>,<span style="color:teal">17</span>,<span style="color:teal">98</span>
<span style="color:teal">200</span> Port command successful
RETR a.txt
<span style="color:teal">150</span> Opening data channel <span style="color:#333333">for</span> file transfer.
<span style="color:teal">226</span> Transfer OK
CWD /
<span style="color:teal">250</span> CWD successful. <span style="color:#dd1144">"/"</span> is current directory.
PWD
<span style="color:teal">257</span> <span style="color:#dd1144">"/"</span> is current directory.
CWD one
<span style="color:teal">250</span> CWD successful. <span style="color:#dd1144">"/one"</span> is current directory.
CWD two
<span style="color:teal">250</span> CWD successful. <span style="color:#dd1144">"/one/two"</span> is current directory.
CWD sub-b
<span style="color:teal">250</span> CWD successful. <span style="color:#dd1144">"/one/two/sub-b"</span> is current directory.
PORT <span style="color:teal">127</span>,<span style="color:teal">0</span>,<span style="color:teal">0</span>,<span style="color:teal">1</span>,<span style="color:teal">17</span>,<span style="color:teal">99</span>
<span style="color:teal">200</span> Port command successful
RETR b.txt
<span style="color:teal">150</span> Opening data channel <span style="color:#333333">for</span> file transfer.
<span style="color:teal">226</span> Transfer OK
CWD /
<span style="color:teal">250</span> CWD successful. <span style="color:#dd1144">"/"</span> is current directory.
QUIT
<span style="color:teal">221</span> Goodbye
disconnected.</code></span></span>
如您所見,啓用了stepwise後,它將使用CD xxx遍歷目錄結構。
使用STEPWISE = FALSE
<span style="color:#333333"><span style="color:#585ac2"><code class="language-java"><span style="color:teal">230</span> Logged on
TYPE A
<span style="color:teal">200</span> Type set to A
SYST
<span style="color:teal">215</span> UNIX emulated by FileZilla
PORT <span style="color:teal">127</span>,<span style="color:teal">0</span>,<span style="color:teal">0</span>,<span style="color:teal">1</span>,<span style="color:teal">4</span>,<span style="color:teal">122</span>
<span style="color:teal">200</span> Port command successful
LIST one/two
<span style="color:teal">150</span> Opening data channel <span style="color:#333333">for</span> directory list
<span style="color:teal">226</span> Transfer OK
PORT <span style="color:teal">127</span>,<span style="color:teal">0</span>,<span style="color:teal">0</span>,<span style="color:teal">1</span>,<span style="color:teal">4</span>,<span style="color:teal">123</span>
<span style="color:teal">200</span> Port command successful
LIST one/two/sub-a
<span style="color:teal">150</span> Opening data channel <span style="color:#333333">for</span> directory list
<span style="color:teal">226</span> Transfer OK
PORT <span style="color:teal">127</span>,<span style="color:teal">0</span>,<span style="color:teal">0</span>,<span style="color:teal">1</span>,<span style="color:teal">4</span>,<span style="color:teal">124</span>
<span style="color:teal">200</span> Port command successful
LIST one/two/sub-b
<span style="color:teal">150</span> Opening data channel <span style="color:#333333">for</span> directory list
<span style="color:teal">226</span> Transfer OK
PORT <span style="color:teal">127</span>,<span style="color:teal">0</span>,<span style="color:teal">0</span>,<span style="color:teal">1</span>,<span style="color:teal">4</span>,<span style="color:teal">125</span>
<span style="color:teal">200</span> Port command successful
RETR one/two/foo.txt
<span style="color:teal">150</span> Opening data channel <span style="color:#333333">for</span> file transfer.
<span style="color:teal">226</span> Transfer OK
PORT <span style="color:teal">127</span>,<span style="color:teal">0</span>,<span style="color:teal">0</span>,<span style="color:teal">1</span>,<span style="color:teal">4</span>,<span style="color:teal">126</span>
<span style="color:teal">200</span> Port command successful
RETR one/two/sub-a/a.txt
<span style="color:teal">150</span> Opening data channel <span style="color:#333333">for</span> file transfer.
<span style="color:teal">226</span> Transfer OK
PORT <span style="color:teal">127</span>,<span style="color:teal">0</span>,<span style="color:teal">0</span>,<span style="color:teal">1</span>,<span style="color:teal">4</span>,<span style="color:teal">127</span>
<span style="color:teal">200</span> Port command successful
RETR one/two/sub-b/b.txt
<span style="color:teal">150</span> Opening data channel <span style="color:#333333">for</span> file transfer.
<span style="color:teal">226</span> Transfer OK
QUIT
<span style="color:teal">221</span> Goodbye
disconnected.</code></span></span>
如您所見,當不逐步使用時,根本不會調用CD操作。
樣品
在下面的示例中,我們將Camel設置爲每小時(60分鐘)一次從FTP服務器下載所有報告作爲BINARY內容,並將其作爲文件存儲在本地文件系統中。
以及使用Spring DSL的路由:
<span style="color:#333333"><span style="color:#585ac2"><code class="language-xml"> <span style="color:navy"><<span style="color:navy">route</span>></span>
<span style="color:navy"><<span style="color:navy">from</span> <span style="color:teal">uri</span>=<span style="color:#dd1144">"ftp://scott@localhost/public/reports?password=tiger&binary=true&delay=60000"</span>/></span>
<span style="color:navy"><<span style="color:navy">to</span> <span style="color:teal">uri</span>=<span style="color:#dd1144">"file://target/test-reports"</span>/></span>
<span style="color:navy"></<span style="color:navy">route</span>></span></code></span></span>
使用遠程FTPS服務器(隱式SSL)和客戶端身份驗證
<span style="color:#333333"><span style="color:#585ac2"><code class="language-java">from(<span style="color:#dd1144">"ftps://admin@localhost:2222/public/camel?password=admin&securityProtocol=SSL&isImplicit=true</span><span style="color:#dd1144">
&ftpClient.keyStore.file=./src/test/resources/server.jks</span><span style="color:#dd1144">
&ftpClient.keyStore.password=password&ftpClient.keyStore.keyPassword=password"</span>)
.to(<span style="color:#dd1144">"bean:foo"</span>);</code></span></span>
消耗遠程FTPS服務器(顯式TLS)和自定義信任存儲配置
<span style="color:#333333"><span style="color:#585ac2"><code class="language-java">from(<span style="color:#dd1144">"ftps://admin@localhost:2222/public/camel?password=admin&ftpClient.trustStore.file=./src/test/resources/server.jks&ftpClient.trustStore.password=password"</span>)
.to(<span style="color:#dd1144">"bean:foo"</span>);</code></span></span>
自定義過濾
駱駝支持可插拔過濾策略。這種策略使其org.apache.camel.component.file.GenericFileFilter
在Java中使用內置。然後,可以使用此類過濾器配置端點,以在處理之前跳過某些過濾器。
在示例中,我們構建了自己的過濾器,該過濾器僅接受文件名中以report開頭的文件。
然後,我們可以使用filter屬性配置路由,以引用我們#
在spring XML文件中定義的過濾器(使用符號):
<span style="color:#333333"><span style="color:#585ac2"><code class="language-xml"> <span style="color:#999988"><em><!-- define our sorter as a plain spring bean --></em></span>
<span style="color:navy"><<span style="color:navy">bean</span> <span style="color:teal">id</span>=<span style="color:#dd1144">"myFilter"</span> <span style="color:teal">class</span>=<span style="color:#dd1144">"com.mycompany.MyFileFilter"</span>/></span>
<span style="color:navy"><<span style="color:navy">route</span>></span>
<span style="color:navy"><<span style="color:navy">from</span> <span style="color:teal">uri</span>=<span style="color:#dd1144">"ftp://[email protected]?password=secret&filter=#myFilter"</span>/></span>
<span style="color:navy"><<span style="color:navy">to</span> <span style="color:teal">uri</span>=<span style="color:#dd1144">"bean:processInbox"</span>/></span>
<span style="color:navy"></<span style="color:navy">route</span>></span></code></span></span>
使用ANT路徑匹配器進行過濾
ANT路徑匹配器是一個過濾器,它是開箱即用地裝入駱駝彈簧罐中的。因此,如果您使用的是Maven,則需要依靠駱駝彈簧。
原因是我們利用Spring的AntPathMatcher進行實際匹配。
文件路徑與以下規則匹配:
-
?
匹配一個字符 -
*
匹配零個或多個字符 -
**
匹配路徑中的零個或多個目錄
下面的示例演示瞭如何使用它:
通過SFTP使用代理
要使用HTTP代理連接到遠程主機,您可以通過以下方式配置路由:
<span style="color:#333333"><span style="color:#585ac2"><code class="language-xml"><span style="color:#999988"><em><!-- define our sorter as a plain spring bean --></em></span>
<span style="color:navy"><<span style="color:navy">bean</span> <span style="color:teal">id</span>=<span style="color:#dd1144">"proxy"</span> <span style="color:teal">class</span>=<span style="color:#dd1144">"com.jcraft.jsch.ProxyHTTP"</span>></span>
<span style="color:navy"><<span style="color:navy">constructor-arg</span> <span style="color:teal">value</span>=<span style="color:#dd1144">"localhost"</span>/></span>
<span style="color:navy"><<span style="color:navy">constructor-arg</span> <span style="color:teal">value</span>=<span style="color:#dd1144">"7777"</span>/></span>
<span style="color:navy"></<span style="color:navy">bean</span>></span>
<span style="color:navy"><<span style="color:navy">route</span>></span>
<span style="color:navy"><<span style="color:navy">from</span> <span style="color:teal">uri</span>=<span style="color:#dd1144">"sftp://localhost:9999/root?username=admin&password=admin&proxy=#proxy"</span>/></span>
<span style="color:navy"><<span style="color:navy">to</span> <span style="color:teal">uri</span>=<span style="color:#dd1144">"bean:processFile"</span>/></span>
<span style="color:navy"></<span style="color:navy">route</span>></span></code></span></span>
如果需要,您還可以爲代理分配用戶名和密碼。請查閱文檔com.jcraft.jsch.Proxy
以發現所有選項。
設置首選的SFTP身份驗證方法
如果要明確指定sftp
組件應使用的身份驗證方法列表,請使用preferredAuthentications
option。例如,如果您希望駱駝嘗試使用私有/公共SSH密鑰進行身份驗證並在沒有公共密鑰可用的情況下回退到用戶/密碼身份驗證,請使用以下路由配置:
<span style="color:#333333"><span style="color:#585ac2"><code class="language-java">from(<span style="color:#dd1144">"sftp://localhost:9999/root?username=admin&password=admin&preferredAuthentications=publickey,password"</span>).
to(<span style="color:#dd1144">"bean:processFile"</span>);</code></span></span>
使用固定名稱使用單個文件
當您要下載單個文件並知道文件名時,可以使用fileName=myFileName.txt
告訴Camel要下載的文件名。默認情況下,使用者仍將執行FTP LIST命令以列出目錄,然後根據該fileName
選項過濾這些文件。儘管在這種用例中,可能需要通過設置關閉目錄列表useList=false
。例如,用於登錄FTP服務器的用戶帳戶可能沒有執行FTP LIST命令的權限。因此,您可以使用關閉它useList=false
,然後使用提供下載文件的固定名稱fileName=myFileName.txt
,然後FTP使用者仍然可以下載文件。如果由於某種原因該文件不存在,則默認情況下Camel將引發異常,您可以將其關閉並通過設置忽略它ignoreFileNotFoundOrPermissionError=true
。
例如,讓駱駝路線拾取單個文件,並在使用後將其刪除,您可以
<span style="color:#333333"><span style="color:#585ac2"><code class="language-java">from(<span style="color:#dd1144">"ftp://admin@localhost:21/nolist/?password=admin&stepwise=false&useList=false&ignoreFileNotFoundOrPermissionError=true&fileName=report.txt&delete=true"</span>)
.to(<span style="color:#dd1144">"activemq:queue:report"</span>);</code></span></span>
注意,我們已經使用了上面討論的所有選項。
您也可以將其與結合使用ConsumerTemplate
。例如,下載一個文件(如果存在)並以String類型獲取文件內容:
<span style="color:#333333"><span style="color:#585ac2"><code class="language-java">String data = template.retrieveBodyNoWait(<span style="color:#dd1144">"ftp://admin@localhost:21/nolist/?password=admin&stepwise=false&useList=false&ignoreFileNotFoundOrPermissionError=true&fileName=report.txt&delete=true"</span>, String.class);</code></span></span>