Camel FTP中文目錄解決辦法


         在Camel中使用FTP只需要簡單的DSL配置就可以了,把對應的jar放到classpath即可,但是在使用中遇到了FTP服務器上中文目錄的問題,如果FTP服務器上的目錄是中文的,那么FTP執行什么信息都沒有,也沒有錯誤,也沒有下載下來。搞得我有些莫名其妙,不知道到底是怎么回事。

 

         后來開始跟蹤Camel源代碼進行debug,終於發現在org.apache.camel.component.file.remote.FtpOperations類的doChangeDirectory方法中,無法進入到對應的中文目錄。

 1   private void doChangeDirectory(String path) {
 2         if (path == null || ".".equals(path) || ObjectHelper.isEmpty(path)) {
 3             return;
 4         }
 5 
 6         log.trace("Changing directory: {}", path);
 7         boolean success;
 8         try {
 9             if ("..".equals(path)) {
10                 changeToParentDirectory();
11                 success = true;
12             } else {
13                 success = client.changeWorkingDirectory(path); 14             }
15         } catch (IOException e) {
16             throw new GenericFileOperationFailedException(client.getReplyCode(), client.getReplyString(), e.getMessage(), e);
17         }
18         if (!success) {
19             throw new GenericFileOperationFailedException(client.getReplyCode(), client.getReplyString(), "Cannot change directory to: " + path);
20         }
21     }

     關鍵就在第13行client.changeWorkingDirectory的方法,而這個client是用的org.apache.commons.net.ftp.FTPClient,上網查找了一下,發現很多人都遇到了FTPClient不能進入中文目錄的問題。

     嘗試了三種方法:

      第一種改變編碼,不行,還是不能進入目錄。

     

 uri = new String(uri.getBytes("gb2312"),"iso-8859-1");

   

     第二種方法,設置表頭的編碼,還是不行。

  

.process(new Processor() {
                            
                            @Override
                            public void process(Exchange exchange) throws Exception {
                                exchange.setProperty(Exchange.CHARSET_NAME, "gb2312");
                            }
                        })

 

   第三種方法,設置FTPClient的編碼,這個終於OK了,關鍵就在最后的紅字,ftpClient.controlEncoding=gb2312

   

String uri = "ftp://username@10.10.XX4.122/中文目錄?password=xxxx&ftpClient.controlEncoding=gb2312";

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM