Node.js 如何使用npm模块ssh2 for nodejs下载包含所有文件和文件夹的目录?
我正在尝试通过SFTP将文件和文件夹下载到我的本地计算机。我使用以下代码,能够下载特定目录中的文件,但无法下载同一目录中的文件夹(递归地下载各自的文件和文件夹)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
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()增加限制