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
USERcommand - pass => STRING
 - 
Password for the
PASScommand 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
LISTresult 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
LISTresult, 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;
ffor files,dfor 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
NLSTresult 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
NLSTresult 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
STATresult, 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
STATresult, 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;
ffor files,dfor 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>