首先,抱歉我的英语不好。
问题是我无法在本地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://foo@127.0.0.1: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)
答案 0 :(得分: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>