首先,抱歉我的英语不好。
问题是我无法在本地 FTP 服务器上上传文件 (.xls)。
这是异常(exception):
[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://<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="ec8a8383acdddedbc2dcc2dcc2dd" rel="noreferrer noopener nofollow">[email protected]</a>: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 协议(protocol),但不适用于 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)
最佳答案
不使用附件。相反,只需将消息正文设置为您要上传的文件的 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>
关于Java Camel FTP 上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14041618/