Camel-FTP超时并创建0字节文件

时间:2013-08-26 17:20:49

标签: java servlets ftp apache-camel

我正在开发一个servlet,我们在数据库中存储了一个FTP URI。用户将选择一个FTP URI(通过“友好”名称),然后从站点上传一个文件。我想使用Camel进行实际上传,因为我们存储的URI以前在camel端点中使用过。

以下是使用文件发送消息的代码:

public void uploadValidFiles(List<ValidatedFile> files, UploadLocationInfo info)
{
    final String uri = info.getUri();
    RouteBuilder rb = new RouteBuilder() {
        public void configure() {
            from("direct:start").to(uri);
        }
    };

    CamelContext ctx = new DefaultCamelContext();

    try {
        ctx.addRoutes(rb);
        ctx.start();
        ProducerTemplate prod = new DefaultProducerTemplate(ctx);
        prod.start();
        for(ValidatedFile file : files)
        {
            File temp = File.createTempFile(file.getFilename(), ".tmp");
            //Transfer MultiPartFile to File
            file.getFile().transferTo(temp);
            prod.sendBodyAndHeader("direct:start", temp, "CamelFileName", file.getFilename());
        }
        prod.stop();
        ctx.stop();
    }
    catch (CamelExecutionException ce)
    {
        System.out.println("Problem!");
        throw new RuntimeException(ce);
    }
}

我正在测试的URI是:ftp://user@ftp.domain.com/folder?password=s3cr3t

在网站上我选择了URI和文件,我点击了上传...然后它就会挂起。最终我得到一个带文字的HTTP500:

  

HTTP状态500 - 请求处理失败;嵌套异常是java.lang.RuntimeException:org.apache.camel.CamelExecutionException:在交换机上执行期间发生异常:Exchange [消息:[正文是基于文件:PATH \ FILE.tmp]]

在我的servlet日志中,我看到:

  

org.apache.commons.net.ftp.FTPConnectionClosedException:连接已关闭但没有指示。

在FTP上创建了一个文件,其中包含已上传文件的名称,但其大小为0

1 个答案:

答案 0 :(得分:2)

我通过将passiveMode = true和binary = true添加到FTP URI

来解决这个问题