Node.jsでFTPを使う

  • 17
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

Node.js始めて10日目

Webpackで作成したjsファイルをレンタルサーバーにアップロードしたいと思います。
今回はftpモジュールを使います。

インストール

いつものおまじない

npm install ftp

接続

var Client = require('ftp');
var c = new Client();
c.connect({
    host:"ftp.hoge.com",
    port:21,//portが21の場合は省略可能
    user:"youraccount",
    password:"yourpassword"
})

c.on('ready',function(){
    console.log("ok");
})

c.on('error',function(err){
    console.log(err);
})

c.on('greeting',function(message){
    console.log(message);
})
結果
成功の場合FTP server ready
失敗の場合{ [Error: Login incorrect.] code: 530 } 

connectメソッドに接続情報をjson形式で渡してあげればOK。
接続成功、失敗についてはイベントで拾う

FTPコマンドを送る

例えばファイル一覧を取得する例

var Client = require('ftp');
var c = new Client();
c.on('ready', function() {
  c.list(function(err, list) {
    if (err) throw err;
    console.dir(list);
    c.end();
  });
});

c.connect({/*接続情報*/});

結果は下記のようにJSON形式で返ってきます

{   type: 'd',
    name: 'web',
    target: undefined,
    sticky: false,
    rights: { user: 'rwx', group: 'rx', other: 'rx' },
    acl: false,
    owner: 'your account',
    group: 'your account group',
    size: 4096,
    date: Tue Feb 03 2015 19:21:00 GMT+0900 (東京 (標準時)) 
} 

リモートディレクトリの階層を移動する

c.on('ready',function(){
  c.cwd('hoge',function(err, currentDir) {
    if (err) throw err;
    c.list(function(err,list){
        console.dir(list);
    })
  });
})

ディレクトリ、hogeに移動して、そのディレクトリのリストを表示する例です。
第二引数、currentDirは、単にそのディレクトリ名を返すようですが、接続先ftpサーバー次第なようです。私が試したサーバーでは何も返さない(undefined)でした。

ファイルをダウンロードする

ダウンロードしたデータがstreamで返ってきますので、それをfsで書き込みしてあげるだけです。

var fs = require("fs");

c.get('test.txt', function(err, stream) {
  if (err) throw err;
  stream.once('close', function() { c.end(); });
  stream.pipe(fs.createWriteStream('test.txt'));
});

これでカレントディレクトリに指定したファイルがダウンロードされます。
ここでいうカレントディレクトリは、このjsファイルをコマンドラインから実行(node test)したときの
カレントディレクトリです

ファイルをアップロードする


c.on('ready',function(){
  c.put('test.js', 'test.js', function(err)  {
    if (err) throw err;
    c.end();
  });
})

c.connect({/*接続情報*/});

これでカレントディレクトリにあるファイルがアップロードされます。
ここでいうカレントディレクトリは、このjsファイルをコマンドラインから実行(node test)したときの
カレントディレクトリです

その他のFTPコマンドもだいたい使用できると思います。試してませんんが、セキュアな接続もできるようです。
詳細については本家ドキュメント(英語)を参照ください。

アップロードするファイルが決まっているのであれば、一つjsファイルを作っておいて
コマンド叩けばアップロードされますから、便利かな。特にwindowsユーザは。