Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用npm模块ssh2 for nodejs下载包含所有文件和文件夹的目录?_Node.js_Npm_Sftp_Ssh2 - Fatal编程技术网

Node.js 如何使用npm模块ssh2 for nodejs下载包含所有文件和文件夹的目录?

Node.js 如何使用npm模块ssh2 for nodejs下载包含所有文件和文件夹的目录?,node.js,npm,sftp,ssh2,Node.js,Npm,Sftp,Ssh2,我正在尝试通过SFTP将文件和文件夹下载到我的本地计算机。我使用以下代码,能够下载特定目录中的文件,但无法下载同一目录中的文件夹(递归地下载各自的文件和文件夹) const folderDir=moment().format('MMM YYYY/D'); const remoteDir = '/var/www/html/view'; const remoteDir = 'Backup'; const download=(remoteDir,folderDir,FolderName)=&g

我正在尝试通过SFTP将文件和文件夹下载到我的本地计算机。我使用以下代码,能够下载特定目录中的文件,但无法下载同一目录中的文件夹(递归地下载各自的文件和文件夹)

 const folderDir=moment().format('MMM YYYY/D');
 const remoteDir = '/var/www/html/view';
 const remoteDir = 'Backup';

const download=(remoteDir,folderDir,FolderName)=>{

conn.on('ready', function() {

    conn.sftp((err, sftp) => {
      if (err) throw err;
      sftp.readdir(remoteDir, (err, list) => {
        if (err) throw err;
        let count = list.length;
        list.forEach(item => {
          let remoteFile = remoteDir + '/' + item.filename;
          var localFile = 'C:/Users/Desktop/'+folderDir+'/'+FolderName+'/' + item.filename;
          //console.log('Downloading ' + remoteFile);
          sftp.fastGet(remoteFile, localFile, (err) => {
            if (err) throw err;
            //console.log('Downloaded to ' + localFile);
            count--;
            if (count <= 0) {
              conn.end();
            }
          });
        });
      });
    });



  }).connect({
    host: '0.0.0.0',
    port: 0,
    username: 'test',
    privateKey: require('fs').readFileSync('')
  });
const folderDir=矩().format('MMM yyy/D');
const remoteDir='/var/www/html/view';
const remoteDir='Backup';
常量下载=(remoteDir、folderDir、FolderName)=>{
连接on('ready',function(){
conn.sftp((错误,sftp)=>{
如果(错误)抛出错误;
sftp.readdir(remoteDir,(err,list)=>{
如果(错误)抛出错误;
让计数=list.length;
list.forEach(项=>{
让remoteFile=remoteDir+'/'+item.filename;
var localFile='C:/Users/Desktop/'+folderDir+'/'+FolderName+'/'+item.filename;
//console.log('下载'+远程文件);
sftp.fastGet(远程文件,本地文件,(错误)=>{
如果(错误)抛出错误;
//console.log('下载到'+localFile);
计数--;

如果(计数通过运行安装模块:

npm i ssh2-sftp-client
您可以这样做:

let fs = require('fs');
let Client = require('ssh2-sftp-client');
let sftp = new Client();


sftp.connect({
    host: '',
    port: '22',
    username: 'your-username',
    password: 'your-password'
}).then(() => {
    // will return an array of objects with information about all files in the remote folder
    return sftp.list('/');
}).then(async (data) => {
    // data is the array of objects
    len = data.length;
    // x is one element of the array
    await data.forEach(x => {
        let remoteFilePath = '/' + x.name;
        sftp.get(remoteFilePath).then((stream) => {
            // save to local folder ftp
            let file = './ftp/' + x.name;
            fs.writeFile(file, stream, (err) => {
                if (err) console.log(err);
            });
        });
    });

}).catch((err) => {
    console.log(err, 'catch error');
});

尝试了此操作。2020-07-30T04:46:24.619Z eb774405-eb3d-4d44-9542-c62805734ad7错误(节点:8)MaxListenerSeceedAdwarning:检测到可能的事件发射器内存泄漏。在[Client]中添加了11个错误侦听器。请使用emitter.setMaxListeners()增加限制