使用Spring Integration安排FTP上的远程文件下载和内存中的进程文件

时间:2014-11-10 15:26:59

标签: java spring ftp spring-integration

我需要每天从远程FTP服务器下载一个文件,并将其内容作为InputStream(或至少作为byte [])提供给类进行进一步处理。理想情况下,我也应该避免任何磁盘写入。

有人可以就如何使用XML或基于注释的配置来配置它吗?

1 个答案:

答案 0 :(得分:1)

Spring Integration目前还没有预先配置的适配器来“流”。一份文件;但是,它有一个支持这种访问的基础组件(FtpRemoteFileTemplate)。

您可以将远程文件模板配置为bean(使用XML或Java Config) - 为其提供会话工厂等,并调用其中一个get()方法:

/**
 * Retrieve a remote file as an InputStream.
 *
 * @param remotePath The remote path to the file.
 * @param callback the callback.
 * @return true if the operation was successful.
 */
boolean get(String remotePath, InputStreamCallback callback);

/**
 * Retrieve a remote file as an InputStream, based on information in a message.
 *
 * @param message The message which will be evaluated to generate the remote path.
 * @param callback the callback.
 * @return true if the operation was successful.
 */
boolean get(Message<?> message, InputStreamCallback callback);

像这样......

    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
    boolean success = template.get("foo.txt", new InputStreamCallback() {

        @Override
        public void doWithInputStream(InputStream stream) throws IOException {
            FileCopyUtils.copy(stream, baos);
        }
    });
    if (success) {
        byte[] bytes = baos.toByteArray());
        ...
    }

或者您可以将输入流直接传递到doWithInputStream()中的处理程序。

在Spring Integration 3.0中添加了FtpRemoteFileTemplate(但在4.0中添加了get()变量,其中包含字符串而不是Message<?>

SftpRemoteFileTemplate也可用。