ssh 2-sftp-client获取请求node.js

js81xvg6  于 2023-06-05  发布在  Node.js
关注(0)|答案(2)|浏览(206)

我正在尝试使用ssh 2-sftp-client从FTP服务器下载文件。
我可以看到下面的代码中所示的文件列表,我的问题是当它涉及到下载文件.
从下面的代码中可以看到,我尝试使用sftp.get获取文件的内容,并在节点文件系统中创建一个文件。
当文件保存时,它不会将文件的内容保存在服务器上,而只是保存[object Object]

var Client = require('../../node_modules/ssh2-sftp-client');
var sftp = new Client();
var root = '/files';
var fs = require('fs');

sftp.connect({
  host: '192.168.0.1',
  port: '22',
  username: 'user',
  password: 'password'
}).then(() => {
  return sftp.list(root);
}).then((data) => {
  for( var i = 0, len = data.length; i < len; i++) {
    console.log(data[i].name);
    var name = data[i].name;
    sftp.get(root+'/'+name).then((file) => {
      console.log(file);
      fs.writeFile('downloads/'+name, file, function(err) {
      if(err) {
        return console.log(err);
      }
      console.log("The file was saved!");
    });
  })      }
}).catch((err) => {
  console.log(err, 'catch error');
});

我怎样才能得到这个来保存文件的内容?
任何帮助或推动在正确的方向将非常感谢。

vkc1a9a2

vkc1a9a21#

我通过更改sftp解决了我的问题。转到以下内容:-

sftp.get(root+"/"+name).then((stream) => {
  stream.pipe(fs.createWriteStream(local+name));
});

我希望这对其他可能有这个问题的人有帮助。

omvjsjqw

omvjsjqw2#

你可以在sftp.get()函数中传递带有绝对路径的文件名作为第二个参数。下面是使用async/await的代码片段:

let sftp = new SFTPClient();
let YOURFILE = path.join(process.cwd(), "YOURFILENAME.EXTENSION");
try {
const connection = await sftp.connect({
host: "YOURHOST",
port: "PORT",
username: "USERNAME",
password: "PASSWORD",
});

const fileList = await sftp.list("/");

console.log("file list ====>>> ", fileList);

await sftp.get(fileList[0].name, YOURFILE);
sftp.end();
console.log("closing sftp connection");
} catch (err) {
console.log(
"Error while connecting to sftp server or fetching files from sftp server====>>>> ",err);
}

相关问题