promise-ftp を使って FTP 接続先のファイル一覧を取得してみる

Node.js・npm でも FTP 通信ができるのじゃ。

node-ftp というパッケージで、FTP 通信ができる。このパッケージをラップして Promise 化したのが promise-ftp だ。

node-ftp および promise-ftp は FTP コマンドがひととおり使えるので、今回は接続先のディレクトリ配下のファイル一覧を取得してみようと思う。

promise-ftp のインストールは以下のとおり。

$ npm i -D promise-ftp

以下のように ftp.js を実装する。

// FTP 接続先情報
const user     = 'user';
const password = 'password';
const host     = 'example.com';

const PromiseFtp = require('promise-ftp');
const promiseFtp = new PromiseFtp();

promiseFtp.connect({
  user    : user,
  password: password,
  host    : host
})
  .then((serverMessage) => {
    // serverMessage は応答するサーバの場合にのみ返される
    console.log('Connected', serverMessage);
    // 「html-dir/」ディレクトリに移動する
    return promiseFtp.cwd('html-dir');
  })
  .then((currentDir) => {
    console.log('Change Working Directory', currentDir);
    // カレントディレクトリのファイル一覧を取得する
    return promiseFtp.list();
  })
  .then((list) => {
    console.log('Directory Listing');
    // 一覧表示
    console.dir(list);
    // 切断
    return promiseFtp.end();
  })
  .then((endResult) => {
    // endResult は false なら正常終了
    console.log('End', endResult);
  })
  .catch((error) => {
    console.log('Error', error);
  });

Promise で書けるのでコールバック地獄に陥らず、見通しが良い。

ファイル一覧となる変数 list は、オブジェクトの配列が返されるので、console.dir() を使用して表示させた。この辺はお好みで整形すれば良いかと。

実行する際は

$ node ftp.js

とすれば良い。package.json"scripts" にこのまま書けば npm run で呼び出せる。

本パッケージを利用してアップロードなんかもできるが、アップロードに関してはより簡潔に行えるパッケージがあるので、次回と次々回に解説する。