当前位置: 首页 > 知识库问答 >
问题:

Camel从FTP读取文件并存储在本地资源文件夹中

任绪
2023-03-14

我试图构建一个简单的路由,从FTP文件夹读取,并将其存储在本地资源文件夹中。我能够连接到FTPendpoint,但之后什么也不会发生。

要启动我的程序,我使用:mvn clean compile camel:run

INFO | Apache Camel 2.20.0 (CamelContext: camel-1) is starting
 INFO | JMX is enabled
 INFO | Type converters loaded (core: 192, classpath: 4)
 INFO | StreamCaching is not in use. If using streams then its recommended to enable stream caching. See more details at http://camel.apache.org/stream-caching.html
 INFO | Route: route1 started and consuming from: ftp://xx.xx.xx.xx/ftp/xx/xx?password=xxxxxx&username=xx
 INFO | Total 1 routes, of which 1 are started
 INFO | Apache Camel 2.20.0 (CamelContext: camel-1) started in 0.333 seconds
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.nettport</groupId>
    <artifactId>camel_download_file_from_ftp_and_get_name_and_content</artifactId>
    <version>1.0-SNAPSHOT</version>




    <dependencies>
        <!-- Camel -->
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-core</artifactId>
            <version>2.20.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>spi-annotations</artifactId>
            <version>2.20.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-jms</artifactId>
            <version>2.20.0</version>
        </dependency>

        <!-- Spring -->
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring</artifactId>
            <version>2.20.0</version>
        </dependency>
        <!-- //Spring -->

        <!-- FTP -->
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-ftp</artifactId>
            <version>2.20.0</version>
        </dependency>
        <!-- //FTP -->

        <!-- Quartz -->
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-quartz</artifactId>
            <version>2.20.0</version>
        </dependency>
        <!-- //Quartz -->

        <!-- ActiveMq -->
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-all</artifactId>
            <version>5.15.1</version>
        </dependency>


        <!-- Logging -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.8.0-alpha2</version>
        </dependency>
        <!-- //Logging -->

    </dependencies>


    <build>
        <plugins>
            <!-- Allows the routes to be run via 'mvn camel:run' -->
            <plugin>
                <groupId>org.apache.camel</groupId>
                <artifactId>camel-maven-plugin</artifactId>
                <version>2.20.0</version>
            </plugin>
        </plugins>
    </build>

</project>
package com.nettport;

import org.apache.camel.builder.RouteBuilder;

public class ReceiverRoute extends RouteBuilder {

    private String receiverFtpEndpoint;

    public void configure() throws Exception {

        // lets shutdown faster in case of in-flight messages stack up
        getContext().getShutdownStrategy().setTimeout(10);

        from(receiverFtpEndpoint)
        .log("### FTP Receiver Route started and consuming ###")
        .to("file:data/work_in_progress")
        .log("Downloaded file ${file:name} complete.");
    }


    public void setReceiverFtpEndpoint(String receiverFtpEndpoint) {
        this.receiverFtpEndpoint = receiverFtpEndpoint;
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://camel.apache.org/schema/spring
       http://camel.apache.org/schema/spring/camel-spring.xsd">


    <bean id="receiverRoute" class="com.nettport.ReceiverRoute">
        <property name="receiverFtpEndpoint" value="ftp://xx.xx.xx.xx/ftp/xx/xx?username=xx&amp;password=xx"/>
    </bean>


    <camelContext xmlns="http://camel.apache.org/schema/spring">
        <routeBuilder ref="receiverRoute"/>
    </camelContext>

</beans>

共有1个答案

秋建义
2023-03-14

好的,同事们。如果有人遇到类似的问题,我设置了一个简单的路由,将文件从FTP复制到本地磁盘文件夹,但它什么也不起作用请尝试以下操作:

>

  • 确保日志中没有可疑的警告错误级别消息。
  • 确保您在pom.xml中指定了camel-FTPcamel-FTP-starter。我已经设置了一个Spring Boot应用程序,并且在我的pom.xml中有以下依赖项

    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-ftp-starter</artifactId>
        <version>3.0.0-M2</version>
    </dependency>
    

    请确保您已阅读此文档:

    • https://github.com/apache/camel/blob/master/components/readme.adoc
    • http://camel.apache.org/ftp2.html
    • 您有正确的架构
    • 您已设置了用户和密码
      null
        $ docker pull stilliard/pure-ftpd:hardened
        $ docker run -e FTP_USER_NAME=lord -e FTP_USER_PASS=nighton -e FTP_USER_HOME=/home/lordnighton  -d --name ftpd_server -p 21:21 -p 30000-30009:30000-30009 -e "PUBLICHOST=localhost" stilliard/pure-ftpd:hardened
        $ ftp ftp://lord:nighton@localhost:21 # check the connection with user/password
    

    >

  • 在扩展RouteBuilder的类中指定路由:

    from("ftp://lord@localhost:21/home/lordnighton?password=nighton&passiveMode=true")
        .to("file:src/main/resources/data/from-ftp");
    

    您还可以将camel组件的日志级别切换到trace以查看更详细的日志

    log4j.logger.org.apache.commons.net=TRACE
    log4j.logger.org.apache.camel.component.file=TRACE
    log4j.logger.org.apache.camel.component.ftp=TRACE
    

    有时将passiveMode切换到true会很有帮助:

    from("ftp://lord@localhost:21/home/lordnighton?password=nighton&passiveMode=true")
    

    调试好运!

  •  类似资料:
    • 我有一个名为的项目,它有以下结构: 所以这两个文件的路径是: 我想读测试文件。TestDataProvider中的json。JAVA 我曾经用过 我看到从URL res=getClass(). getClassLoader(). getResources("testfile.json")返回; 有人能帮我吗?

    • 问题内容: 我正在使用Spring Boot和。我正在尝试从文件夹读取一个文件。我尝试了几种不同的方法,但无法正常工作。这是我的代码。 这是文件的位置。 在这里,我可以看到文件夹中的文件。 但是,当我运行代码时,出现以下错误。 我在代码中做错了什么? 问题答案: 在花费大量时间尝试解决此问题之后,终于找到了可行的解决方案。该解决方案利用了Spring的ResourceUtils。也应该适用于jso

    • 如何从资源文件夹的子文件夹中读取文件。 我在资源文件夹中有一些json文件,例如: 现在我想在我的课堂上读到这个 这是我正在尝试的,但是失败了。 不起作用,那么我正在尝试: 这两样东西都不工作。

    • 以下是我得到的错误: 提前感谢!

    • 问题内容: 我们如何从文本文件读取数据并将其存储在String变量中? 是否有可能在方法中传递文件名,并且它将返回字符串,即文件中的文本。 我必须导入哪种工具?声明列表会很棒。 问题答案: 这些是必需的进口: 这是一种方法,通过将文件名作为参数传递给它,您可以从文件中进行读取,如下所示:

    • 问题内容: 我正在尝试在Android Studio的res \ raw文件中保留一个.txt文件,并读取/解析该文件。我在“ res”目录(未创建)中创建的名为“ raw”的文件夹中有一个文件“ my_file.txt”。 我认为我的主要问题是:创建File对象(与Scanner对象一起使用)时,应该为文本文件传递什么路径? 这是我的代码: 问题答案: 认为您正在寻找符合以下条件的东西 其中ct