NAME
Net::Async::FTP
- use FTP with IO::Async
SYNOPSIS
use IO::Async::Loop;
use Net::Async::FTP;
my $loop = IO::Async::Loop->new();
my $ftp = Net::Async::FTP->new();
$loop->add( $ftp );
$ftp->connect(
host => "ftp.example.com",
)->then( sub {
$ftp->login(
user => "username",
pass => "password",
)
})->then( sub {
$ftp->retr(
path => "README.txt",
)
})->then( sub {
my ( $data ) = @_;
print "README.txt says:\n";
print $data;
})->get;
DESCRIPTION
This object class implements an asynchronous FTP client, for use in IO::Async-based programs.
The code in this module is not particularly complete. It contains a minimal implementation of a few FTP commands, not even the full minimal set the RFC suggests all clients should support. I am releasing it anyway, because it is still useful as it stands, and could easily support extra commands being added if anyone would find it useful.
The (undocumented) do_command()
method provides a generic base for the currently-implemented commands, and would be the basis for new commands.
As they say so often in the open-source world; Patches Welcome.
CONSTRUCTOR
$ftp = Net::Async::FTP->new( %args )
This function returns a new instance of a Net::Async::FTP
object. As it is a subclass of IO::Async::Stream
its constructor takes any arguments for that class.
METHODS
$ftp->connect( %args ) ==> ()
Connects to the FTP server. Takes the following arguments:
- host => STRING
-
Hostname of the server
- service => STRING or INT
-
Optional. Service name or port number to connect to. If not supplied, will use
ftp
. - family => INT
-
Optional. Socket family to use. Will default to whatever
getaddrinfo()
returns if not supplied. - on_connected => CODE
-
Optional when returning a Future. Continuation to call when connection is successful.
$on_connected->()
- on_error => CODE
-
Optional when returning a Future. Continuation to call on an error.
$on_error->( $message )
$ftp->login( %args ) ==> ()
Sends a USER
and optionally PASS
command. Takes the following arguments:
- user => STRING
-
Username for the
USER
command - pass => STRING
-
Password for the
PASS
command if required - on_login => CODE
-
Optional when returning a future. Continuation to invoke on successful login.
$on_login->()
- on_error => CODE
-
Optional when returning a future. Continuation to invoke on an error.
$on_error->( $message )
$ftp->rename( %args ) ==> ()
Renames a file on the remote server. Takes the following arguments
- oldpath => STRING
-
Path to file to rename
- newpath => STRING
-
Desired new path for the file
- on_done => CODE
-
Optional when returning a future. Continuation to invoke on success.
$on_done->()
- on_error => CODE
-
Optional. Continuation to invoke on an error.
$on_error->( $message )
$ftp->dele( %args ) ==> ()
Deletes a file on the remote server. Takes the following arguments
- path => STRING
-
Path to file to delete
- on_done => CODE
-
Optional when returning a future. Continuation to invoke on success.
$on_done->()
- on_error => CODE
-
Optional. Continuation to invoke on an error.
$on_error->( $message )
$ftp->list( %args ) ==> $list
Runs a LIST
command on a path on the remote server; which requests details on the file, or contents of the directory. Takes the following arguments
- path => STRING
-
Path to
LIST
- on_list => CODE
-
Optional when returning a future. Continuation to invoke on success. Is passed a list of lines from the
LIST
result in a single string.$on_list->( $list )
- on_error => CODE
-
Optional. Continuation to invoke on an error.
$on_error->( $message )
The list_parsed
method may be easier to use as it parses the lines.
$ftp->list_parsed( %args ) ==> @list
Runs a LIST
command on a path on the remote server; and parse the result lines. Takes the following arguments
- path => STRING
-
Path to
LIST
- on_list => CODE
-
Optional when returning a future. Continuation to invoke on success. Is passed a list of files from the
LIST
result, one line per element.$on_list->( @list )
- on_error => CODE
-
Optional. Continuation to invoke on an error.
$on_error->( $message )
The @list
array will be passed a list of HASH
references, each formed like
- name => STRING
-
The filename
- type => STRING
-
A single character;
f
for files,d
for directories - size => INT
-
The size in bytes
- mtime => INT
-
The item's last modify timestamp, as a UNIX epoch time
- mode => INT
-
The access mode, as a number
$ftp->nlist( %args ) ==> $list
Runs a NLST
command on a path on the remote server; which requests a list of filenames in a directory. Takes the following arguments
- path => STRING
-
Path to
NLST
- on_list => CODE
-
Optional when returning a future. Continuation to invoke on success. Is passed a list of names from the
NLST
result in a single string.$on_list->( $list )
- on_error => CODE
-
Optional. Continuation to invoke on an error.
$on_error->( $message )
The namelist
method may be easier to use as it splits the lines.
$ftp->namelist( %args ) ==> @names
Runs a NLST
command on a path on the remote server; which requests a list of filenames in a directory. Takes the following arguments
- path => STRING
-
Path to
NLST
- on_names => CODE
-
Optional when returning a future. Continuation to invoke on success. Is passed a list of names from the
NLST
result in a list, one name per entry$on_name->( @names )
- on_error => CODE
-
Optional. Continuation to invoke on an error.
$on_error->( $message )
$ftp->retr( %args ) ==> $content
Retrieves a file on the remote server. Takes the following arguments
- path => STRING
-
Path to file to retrieve
- on_data => CODE
-
Optional when returning a future. Continuation to invoke on success. Is passed the contents of the file as a single string.
$on_data->( $content )
- on_error => CODE
-
Optional. Continuation to invoke on an error.
$on_error->( $message )
$ftp->stat( %args ) ==> @stat
Runs a STAT
command on a path on the remote server; which requests details on the file, or contents of the directory. Takes the following arguments
- path => STRING
-
Path to
STAT
- on_stat => CODE
-
Optional when not returning a future. Continuation to invoke on success. Is passed a list of lines from the
STAT
result, one line per element.$on_stat->( @stat )
- on_error => CODE
-
Optional. Continuation to invoke on an error.
$on_error->( $message )
The stat_parsed
method may be easier to use as it parses the lines.
$ftp->stat_parsed( %args ) ==> @stat
Runs a STAT
command on a path on the remote server; and parse the result lines. Takes the following arguments
- path => STRING
-
Path to
STAT
- on_stat => CODE
-
Optional when returning a future. Continuation to invoke on success. Is passed a list of lines from the
STAT
result, one line per element.$on_stat->( @stat )
- on_error => CODE
-
Optional. Continuation to invoke on an error.
$on_error->( $message )
The @stat
array will be passed a list of HASH
references, each formed like
- name => STRING
-
The filename
- type => STRING
-
A single character;
f
for files,d
for directories - size => INT
-
The size in bytes
- mtime => INT
-
The item's last modify timestamp, as a UNIX epoch time
- mode => INT
-
The access mode, as a number
If STAT
is invoked on a file, then @stat
will contain a single reference to represent it. If invoked on a directory, the @stat
will start with a reference about the directory itself (whose name will be .
), then one per item in the directory, in the order the server returned the lines.
$ftp->stor( %args ) ==> ()
Stores a file on the remote server. Takes the following arguments
- path => STRING
-
Path to file to store
- data => STRING
-
New contents for the file
- on_stored => CODE
-
Optional when returning a future. Continuation to invoke on success.
$on_stored->()
- on_error => CODE
-
Optional. Continuation to invoke on an error.
$on_error->( $message )
SEE ALSO
http://tools.ieft.org/html/rfc959 - FILE TRANSFER PROTOCOL (FTP)
AUTHOR
Paul Evans <leonerd@leonerd.org.uk>