FTP has been edited by Claus Ibsen (Jul 12, 2008).

Change summary:

CAMEL-485

(View changes)

Content:

FTP/SFTP Component

This component provides access to remote file systems over the FTP and SFTP protocols.
This component is an extension of the File component.

URI format

ftp://[EMAIL PROTECTED]:port]/filename[?options]
sftp://[EMAIL PROTECTED]:port]/filename[?options]

Where filename represents the underlying file name or directory. Can contain nested folders.
The username is currently only possible to provide in the hostname parameter.
If no port number is provided. Camel will provide default values according to the protocol. (ftp = 21, sftp = 22)

Examples

ftp://[EMAIL PROTECTED]/public/upload/images/holiday2008?password=secret&binary=true
ftp://[EMAIL PROTECTED]:12049/reports/2008/budget.txt?password=secret&binary=false&directory=false
ftp://publicftpserver.com/download

Options

Name Default Value Description
directory true indicates whether or not the given file name should be interpreted by default as a directory or file (as it sometimes hard to be sure with some FTP servers)
password null specifies the password to use to login to the remote file system
binary false specifies the file transfer mode BINARY or ASCII. Default is ASCII.
setNames false Used by FTPConsumer. If set to true Camel will set the special filename header FileComponent.HEADER_FILE_NAME value to the filename from the FTP Server.
Note: In Camel 1.4 the default value has changed to true.
consumer.delay 500 Delay in millis between each poll
consumer.initialDelay 1000 Millis before polling starts
consumer.userFixedDelay false true to use fixed delay between pools, otherwise fixed rate is used. See ScheduledExecutorService in JDK for details.

As this component is an extension to the File component the options from this parent component is also available.

Message Headers

The following message headers is provided in the message.

Header Description
file.remote.host The hostname of the remote server
file.remote.name The fullname of the file consumed from the remote server

Consumer properties

When using FTPConsumer (downloading files from a FTP Server) the consumer specific properties from the File component should be prefixed with "consumer.". For example the delay option from File Component should be specified as "consumer.delay=30000" in the URI. See the samples or some of the unit tests of this component.

Known issues

When consuming files (downloading) you must use type conversation to either String or to InputStream for ASCII and BINARY file types.
In Camel 1.4 this is fixed, as there are build in type converters for the ASCII and BINARY file types, meaning that you do not need the convertBodyTo _expression_.

Also in Camel 1.3 since setNames is default false then you must explicitly set the filename using the setHeader _expression_ when consuming from FTP directly to File.
The code below illustrates this:

private String ftpUrl = "ftp://[EMAIL PROTECTED]:21/public/downloads?password=admin&binary=false";
private String fileUrl = "file:myfolder/?append=false&noop=true";

return new RouteBuilder() {
    public void configure() throws Exception {
        from(ftpUrl).setHeader(FileComponent.HEADER_FILE_NAME, constant("downloaded.txt")).convertBodyTo(String.class).to(fileUrl);
    }
};

Or you can set the option to true as illustrated below:

private String ftpUrl = "ftp://[EMAIL PROTECTED]:21/public/downloads?password=admin&binary=false&setNames=true";
private String fileUrl = "file:myfolder/?append=false&noop=true";

return new RouteBuilder() {
    public void configure() throws Exception {
        from(ftpUrl).convertBodyTo(String.class).to(fileUrl);
    }
};

Sample

In the sample below we setup Camel to download all the reports from the FTP server once every hour (60 min) as BINARY content and store it as files on the local file system.

protected RouteBuilder createRouteBuilder() throws Exception {
    return new RouteBuilder() {
        public void configure() throws Exception {
            // we use a delay of 60 minutes (eg. once pr. hour we poll the FTP server
            long delay = 60 * 60 * 1000L;

            // from the given FTP server we poll (= download) all the files
            // from the public/reports folder as BINARY types and store this as files
            // in a local directory. Camle will use the filenames from the FTPServer

            // notice that the FTPConsumer properties must be prefixed with "consumer." in the URL
            // the delay parameter is from the FileConsumer component so we should use consumer.delay as
            // the URI parameter name. The FTP Component is an extension of the File Component.
            from("ftp://[EMAIL PROTECTED]/public/reports?password=tiger&binary=true&consumer.delay=" + delay).
                to("file://target/test-reports");
        }
    };
}

See Also

Reply via email to