使用节点js从ftp站点下载多个文件 [英] Downloading multiple file from ftp site using node js

查看:638
本文介绍了使用节点js从ftp站点下载多个文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图从根文件夹下载ftp服务器上的每个文件。
我做的是这样 -

pre $ ftpClient.ls(。,function(err,res){
res.forEach(function(file){
console.log(file.name);

ftpClient.get(./\"+ file.name,'D:/ styleinc / ftp /'+ file.name,function(hadErr){
if(hadErr)
console.log(hadErr);
else
console.log('File copied ');

});
});



<但是在运行时会给我错误 -

$ p $ {[Error:connect ECONNREFUSED]
code:'ECONNREFUSED' ,
errno:'ECONNREFUSED',
syscall:'connect',
msg:'可能在尝试进行PASV操作时正在进行'
}

我已经成功登录并在ftp站点上验证了我的自我.....
i不知道什么请指导我。

解决方case

这是我用async.mapLimit的代码块,它只能同时处理一个连接。

 'use strict'

var JSFtp = require('jsftp');
var inspect = require('util')。inspect;
var fs = require('fs');
var async = require('async');

var ftp = new JSFtp(require('./ util / ftp'​​))
var local ='EDI / mohawk / OUTBOX /'
var remote ='OUTBOX'
$ b $ var collectFiles = function(dir){
return new Promise(function(resolve,reject){
ftp.ls(dir +'/ *',function(err,如果(错误)拒绝(错误)
console.log(res)
var files = [];
res.forEach(function(file){
files.push(file.name)
});
resolve(files)
})
})
}

collectFiles(remote).then(function(files){
console.log(files)
async.mapLimit(files,1,function(file,callback){
console.log('尝试:'+ remote + file +' - >'+ local + file)
ftp.get(remote +'/'+ file,local +'/'+ file,function(err){
如果(err){
console.log('Error getting'+ file)
callback(err)
} else {
console.log('Got'+ file)
callback()
$ b})
},函数(err,res){
if(err){
console.log(err)
}
console.log('updates complete'+ res)
})
})


i am trying to download each file on ftp server from root folder. what i did is this-

ftpClient.ls(".", function(err, res) {
      res.forEach(function(file) {
          console.log(file.name);

            ftpClient.get("./"+file.name, 'D:/styleinc/ftp/'+file.name, function(hadErr) {
                if (hadErr)
                  console.log(hadErr);
                else
                  console.log('File copied successfully!');

      });
    });

but on running it gives me error-

{ [Error: connect ECONNREFUSED]
   code: 'ECONNREFUSED',
   errno: 'ECONNREFUSED',
   syscall: 'connect',
   msg: 'Probably trying a PASV operation while one is in progress' 
  }

i have already successfully logged in and authenticated my self on ftp site..... i don't know what to do please guide me.

解决方案

This is the chunk of code I used with async.mapLimit to make it work with only one connection concurrently.

'use strict'

var JSFtp = require('jsftp');
var inspect = require('util').inspect;
var fs = require('fs');
var async = require('async');

var ftp = new JSFtp(require('./util/ftp'))
var local = 'EDI/mohawk/OUTBOX/'
var remote = 'OUTBOX'

var gatherFiles = function(dir){
  return new Promise(function(resolve, reject){
    ftp.ls(dir + '/*', function(err, res) {
      if (err) reject(err)
      console.log(res)
      var files = [];
      res.forEach(function(file){
        files.push(file.name)
      });
      resolve(files)
    })
  })
}

gatherFiles(remote).then(function(files){
  console.log(files)
  async.mapLimit(files, 1, function(file, callback){
    console.log('attempting: ' +remote + file + '->' + local + file)
    ftp.get(remote +'/'+ file, local +'/'+ file, function(err){
      if(err){
        console.log('Error getting ' + file)
        callback(err)
      }else{
        console.log('Got ' + file)
        callback()
      }

    })
  }, function(err, res){
    if(err){
      console.log(err)
    }
    console.log('updates complete' + res)   
  })
})

这篇关于使用节点js从ftp站点下载多个文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆