Я уже некоторое время пытаюсь загрузить файл из моего хранилища файлов SFTP на мой локальный компьютер - И посетил несколько стековых сообщений - Как этот:
SFTP-модули в узле для загрузки и удаления файлов
Однако я не могу заставить его работать. У меня есть этот код - который в точности совпадает с кодом, опубликованным 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 он все равно загружает пустой файл.
Может кто-нибудь пролить свет на то, почему я сталкиваюсь с этой проблемой? Моя конечная цель - загрузить файл в виде потока и отправить его в браузер на стороне клиента через заголовки ответа.
UPDATE
Я нашел способ загрузить файл, вместо использования npm-модуля ssh2-sftp-client, я использовал 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