ftp module

FTP是很傳統但是卻很好用的連線技術,在Browser中,ftp跟http有同樣的地位,可以直接作為檔案下載用,而node.js中,request模組作為http協定資料下載很OK,但是要讀取ftp的資料就必須要透過ftp協定相容的模組,node-ftp這個專案是專門作為ftp用途的node.js套件,使用上簡單,也可以串連其他streaming模組ㄛ!

Github repository

https://github.com/mscdex/node-ftp

Installation

npm install ftp

Sample Usage

官網上說明相當詳細,下面介紹幾個簡單的應用範例:

透過ftp模組抓檔案

ftp.cmegroup.com是美國地區一家公司所提供的marketing data下載的地方,他以ftp協定將鏈結公布在網路上,讓瀏覽者可以點選下載... 這邊以該服務的某個資源位置(ftp://ftp.cmegroup.com/pub/settle/comex_future.csv)為例做下載動作...

var Client = require('ftp');
var fs = require('fs');
var c = new Client();
var connectionProperties = {host: "ftp.cmegroup.com"};

c.on('ready', function () {
    console.log('ready');
    c.get('/pub/settle/comex_future.csv', function(err, stream) {
        if (err) throw err;
        stream.once('close', function() { c.end(); });
        stream.pipe(fs.createWriteStream('data.csv'));
    });
});

c.connect(connectionProperties);

上面程式碼主要需要在連線時指定connection server位置,也就是ftp server,因為該服務不用提供帳號密碼,在此即無需要將帳號密碼設定在"connectionProperties"中。而連線ready狀態完成後,即可以做資料下載動作...

透過ftp模組串接http模組

由於ftp模組有時做pipe串聯串流物件,因此可以透過一些改寫將服務內嵌http協定中,讓http連線的資料透過該server直接存取ftp網站的資料

這邊分成兩支程式:

ftp存取主程式 - ftputil.js

var Client = require('ftp');
var fs = require('fs');


function getData(req, res) {
  var c = new Client();
  var connectionProperties = {host: "ftp.cmegroup.com"};

    c.on('ready', function () {
      console.log('ready');
      c.get('/pub/settle/comex_future.csv', function(err, stream) {
        if (err) throw err;
        stream.once('close', function() { c.end(); });
        stream.pipe(res);
      });
    });

    c.connect(connectionProperties);
}

exports.getData = getData;

express主程式 - app.js

這邊僅就routing部分描述,讓"/test"路由可以存取ftp物件...

var test = require('./test');
app.get('/test', function(req, res) {
  test.getData(req, res);
});

測試:

curl http://localhost:3000/test

原則上測試結果相當於ftp所見內容...

results matching ""

    No results matching ""