我试图将文件发送到FTP。
我注意到如果我这样做,使用命令提示符一切正常:
put test.txt 'MY_FILE_NAME_IN_FTP_HERE'
但是,尝试使用我的Spring发送文件我得到了这个:
异常是java.io.IOException:无法写入' MY_FILE_NAME_IN_FTP_HERE'。服务器回复:554未采取请求的操作:GDG名称转换失败。
我的处理程序就像(这就像出站通道适配器,如果你想把它看成一个xml):
@SuppressWarnings({ "rawtypes", "unchecked" })
@Bean
@ServiceActivator(inputChannel = "toFtpChannel")
public MessageHandler handler() throws IOException {
FileTransferringMessageHandler handler = new FileTransferringMessageHandler(ftpSessionFactory());
final String fileNameExpression = MY_FILE_NAME_IN_FTP_HERE
//TODO: Need to check how should be the actual remote directory expression. It is mandatory in the SessionFactory.
handler.setRemoteDirectoryExpression(new LiteralExpression(""));
handler.setUseTemporaryFileName(false);
handler.setFileNameGenerator(new FileNameGenerator() {
public String generateFileName(Message<?> message) {
return fileNameExpression;
}
});
return handler;
}
我的问题是,为什么我在sessionFactory
中遗失了答案 0 :(得分:0)
将ftpSessionFactory.setFileType(FTP.ASCII_FILE_TYPE);
添加到我的会话工厂后,问题就消失了。
所以我的新Sessiong Factory配置是:
@Bean
public SessionFactory<FTPFile> ftpSessionFactory() throws IOException {
DefaultFtpSessionFactory ftpSessionFactory = new DefaultFtpSessionFactory();
ftpSessionFactory.setHost(host);
ftpSessionFactory.setPort(Integer.parseInt(port));
ftpSessionFactory.setUsername(username);
ftpSessionFactory.setPassword(password);
ftpSessionFactory.setFileType(FTP.ASCII_FILE_TYPE);
return new CachingSessionFactory<FTPFile>(ftpSessionFactory);
}