LoginSignup
38
32

More than 5 years have passed since last update.

Node.jsでFTPを使う

Posted at

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ユーザは。

38
32
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
32