将文件发送到FTP

时间:2017-03-14 18:25:31

标签: java spring ftp spring-integration spring-integration-sftp

我试图将文件发送到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

中遗失了

1 个答案:

答案 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);        
}