2012-12-26 112 views
2

首先,對不起我的英語不好。Java駱駝FTP上傳

問題是我無法上傳本地FTP服務器上的文件(.xls)文件。

這是例外:

[org.apache.camel.component.file.GenericFileOperationFailedException - Error writing file GAS_EAV_EMV.xls] 

這是我的路線:

<route id="sendFtp"> 
    <from uri="direct:sendFtp"/> 
    <setHeader headerName="CamelFileName"> 
     <simple>GAS_EAV_EMV.xls</simple> 
    </setHeader> 
    <process ref="egssisFtpProcessor"/> 
    <to uri="ftp://[email protected]:21/?password=pwd"/> 
</route> 

這裏我處理器附加的文件:

public class EgssisFtpProcessor implements Processor { 

    @Override 
    public void process(Exchange exchange) throws Exception { 
     String filename = exchange.getIn().getHeader(Exchange.FILE_NAME, String.class); 
     exchange.getIn().addAttachment(filename, new DataHandler(new FileDataSource(filename))); 
    } 
} 

交換對象有在附處理器的末端。

它適用於SMTP協議,但不適用於FTP。

有什麼想法?

服務器日誌:

[14:29:29] - [78] Connecté à 127.0.0.1. Collecte du Nom d'utilisateur. 
[14:29:29] - [78] Usager FOO Connecté IP: 127.0.0.1 
[14:29:29] - [78] FOO : Répertoire en Cours: C:\tmp\ 
[14:29:29] - [78] Client 127.0.0.1 Déconnecté (00:00:00 Min) 

回答

4

附着物未使用。相反,只需將消息正文設置爲要上載的文件的java.io.File即可。

exchange.getIn().setBody(new File(filename)); 

而且由於您使用XML,您可能希望在沒有任何Java代碼的情況下執行此操作。您可以使用消息轉換器EIP將消息正文轉換爲一個java.io.File,其頭文件作爲文件名。

<transform> 
    <simple resultType="java.io.File">${header.CamelFileName}</simple> 
</transform> 
+0

謝謝!有用 – kinaesthesia