Movatterモバイル変換


[0]ホーム

URL:


Node.js で FTP / FTPS 通信 を行う 方法

2017年5月21日0:150 件のコメント

外部連携を行う際、HTTP / HTTPS の次に使いそうなのが FTP / FTPS 通信と思います。今回は Node.js で FTP / FTPS 通信を行うサンプルコードを作成しました。素のまま使うとコードが面倒になるのでftp モジュールを使った通信方法をまとめています。

ftp モジュール インストール

とりあえず、利用にあたってftp モジュールのインストールを行っておきます。

npm install ftp --save

サンプルコード

ファイルダウンロード

FTPでダウンロード

ftp://192.168.86.135:21/test/sample.txt をダウンロードするサンプルコードを以下に載せます。

var fs = require("fs");var Client = require("ftp");var client = new Client();client.connect({  host: "192.168.86.135",  port: 21,  user: "ftpuser",  password: "ftpuser"});client.on("ready", () => {  client.get("test/sample.txt", (error, stream) => {    if (error) {      throw error;    }    stream.once('close', function () { client.end(); });    stream.pipe(fs.createWriteStream(`./recieved/sample.local-copy_${(new Date()).getTime()}.txt`));  });});

L5-10
接続先のサーバー、ユーザー、パスワードを設定します。

L12
接続確立するとready イベントが発生するので、後続操作はready イベントのコールバックに指定します。

L13
必要なファイルをclient.get(filename,callback) にてダウンロードします。ディレクトリ変更が必要であればclient.cwd() を利用して移動しておきます。

FTPSでダウンロード

上記とほぼコードは同じです。差分があるところをハイライトしました。

process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = "0";var fs = require("fs");var Client = require("ftp");var client = new Client();client.connect({  host: "192.168.86.135",  port: 21,  secure: true,  user: "ftpuser",  password: "ftpuser"});client.on("ready", () => {  client.get("test/sample.txt", (error, stream) => {    if (error) {      throw error;    }    stream.once('close', function () { client.end(); });    stream.pipe(fs.createWriteStream(`./recieved/sample.local-copy_${(new Date()).getTime()}.txt`));  });});

L1
FTPサーバーがオレオレ証明書を利用している場合、証明書エラーが発生します。こうした場合はエラーを無視するオプションNODE_TLS_REJECT_UNAUTHORIZED を設定しておきます。

L10
FTPSアクセスする場合はsecure 属性を指定します。

ファイルのアップロード

コードはダウンロードとほぼ変わりません。アップロード時はput を使う点が異なります。

FTPでアップロード

var fs = require("fs");var Client = require("ftp");var client = new Client();client.connect({  host: "192.168.86.135",  port: 21,  user: "ftpuser",  password: "ftpuser"});client.on("ready", () => {  client.put("src.txt", "dist.txt", (error) => {    if (error) {      throw error;    }    client.end();  });});

FTPSでアップロード

process.env["NODE_TLS_REJECT_UNAUTHORIZED"] = "0";var fs = require("fs");var Client = require("ftp");var client = new Client();client.connect({  host: "192.168.86.135",  port: 21,  secure: true,  user: "ftpuser",  password: "ftpuser"});client.on("ready", () => {  client.put("src.txt", "dist.txt", (error) => {    if (error) {      throw error;    }    client.end();  });});

ftp モジュール API

readyイベント

接続と認証が終わったとき呼び出されます。

ftp.connect(config )

FTPサーバーへ接続します。

config

Type:object

サーバー接続に必要な設定を指定します。 指定できる設定プロパティは以下の通りです。

プロパティ名デフォルト説明
hoststring"localhost"FTPサーバーのホスト名またはIPアドレスを指定します。
portinteger21FTPサーバーのポート番号を指定します。
secureboolean / "control" / "implicit"false暗号化通信の設定を行います。
true
制御通信およびデータ通信の両方で暗号化通信を行います。
"control"
制御通信のみ暗号化通信を行います。
"implicit"
暗黙的暗号化制御接続を行います。(通常 990 ポートを利用します。最近ではあまり利用されません。)
secureOptionsobject(none)tls.connect() メソッドに渡すオプションを指定します。
userstring"anonymous"認証に使うユーザー名を指定します。
passwordstring"anonymous@"認証に使うパスワードを指定します。
connTimeoutinteger10000制御接続確立まで何ミリ秒まで待つかを指定します。
pasvTimeoutinteger10000PASVデータ接続で何ミリ秒まで待つかを指定します。
keepaliveinteger10000接続維持のために"dummy"(NOOP)コマンドを送信する間隔(ミリ秒)を指定します。

ftp.cwd(path,callback )

カレントディレクトリをpath に変更します。

path

Type:string

移動先のパスを バックスラッシュ "/" 区切りで指定します。

callback

Type:function(Error error ,string currentDir)

currentDir はサーバー応答に含まれている場合に設定されます。

ftp.get(path,callback )

サーバーから指定したパスにあるデータを受信します。

path

Type:string

移動先のパスを バックスラッシュ "/" 区切りで指定します。

callback

Type:function(Error error ,ReadableStream stream)

stream は受信したファイルのストリームが渡されます。

ftp.put(src,dis,callback )

サーバーからファイルを取得します。

src

Type:ReadableStream /Buffer /string

送信したいファイルのストリームまたはローカルファイルパスを指定します。

dist

Type:string

送信先のパスを バックスラッシュ "/" 区切りで指定します。

callback

Type:function (Error error )

送信完了したら呼び出されます。

今回の記事は参考になったでしょうか?Node.js で FTP/FTPS通信 を行うポイントは以下になります。今回の記事も参考になれば幸いです。

  • FTP/FTPS にはftp モジュール を利用する
  • 接続はclient.connect()
  • ディレクトリ変更はclient.cwd()
  • ファイルダウンロードはclient.get()
  • ファイルアップロードはclient.put()
  • FTPS を利用する場合はclient.connect()secure: true を指定する
  • オレオレ証明書を利用する場合はprocess.env["NODE_TLS_REJECT_UNAUTHORIZED"] = "0"; を記述する

参考記事

最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!