有一段时间以来,我一直试图从我的SFTP文件存储中下载一个文件到我的本地机器--并访问了许多堆栈帖子--比如:
SFTP modules in Node to download and delete files
但是,我不能让它起作用。我有这个代码--与Mscdex在我所链接的问题中发布的代码完全相同--但是它不起作用。
const SFTPClient = require('ssh2-sftp-client');
const sftp = new SFTPClient();
const fs = require('fs');
sftp.connect({
host: '206.189.113.33',
port: '22',
username: 'root',
password: 'password'
}).then(() => {
const remoteFilename = 'path/to/file.json';
const localFilename = 'file.json';
sftp.get(remoteFilename).then((stream) => {
stream.pipe(fs.createWriteStream(localFilename));
});
}).catch((err) => {
console.log(err)
})它确实下载了一个文件到我的本地机器-然而,这是一个完全空白的文件。起初,我认为这是由于我需要下载的文件格式-- .csv.gz --但是即使在使用简单的.json和.html文件进行测试时,它仍然下载一个空白文件。
有人能解释一下我为什么会遇到这个问题吗?我的最终目标是以流的形式下载文件,并通过响应头将其推送到客户端浏览器。
更新
我找到了一种下载文件的方法,而不是使用npm模块ssh2-sftp客户机,而是使用npm模块ssh2。我可以用以下代码很好地下载该文件:
var Client = require('ssh2').Client;
var connSettings = {
host: '206.189.113.33',
port: 22,
username: 'root',
password: 'password'
};
var conn = new Client();
conn.on('ready', function() {
conn.sftp(function(err, sftp) {
if (err) throw err;
var moveFrom = "path/to/file.json";
var moveTo = "file.json";
sftp.fastGet(moveFrom, moveTo , {}, function(downloadError){
stream.pipe(fs.createWriteStream(localFilename));
});
});
}).connect(connSettings);但是,有人能告诉我如何使用此代码返回流,而不是下载文件,因为我希望能够将流推送到客户端并在浏览器中下载文件。
事先非常感谢,
G
发布于 2019-01-17 16:35:12
所以我的解决方案是:
var Client = require('ssh2').Client;
var connSettings = {
host: '206.189.113.33',
port: 22,
username: 'root',
password: 'password'
};
var conn = new Client();
conn.on('ready', function() {
conn.sftp(function(err, sftp) {
if (err) throw err;
var moveFrom = "path/to/file.json";
var moveTo = "file.json";
sftp.fastGet(moveFrom, moveTo , {}, function(downloadError){
if(downloadError) throw downloadError;
var file = 'file.json';
res.download(file)
});
});
}).connect(connSettings);ssh2 npm模块似乎不允许下载流。相反,我只是在服务器上下载了文件,然后使用res.download()将其推回浏览器,以便自动开始下载。
https://stackoverflow.com/questions/54237123
复制相似问题