Я некоторое время пытался загрузить файл из моего хранилища файлов SFTP на свой локальный компьютер - и посетил несколько сообщений стека - например, этот:
Модули SFTP в Node для загрузки и удаления файлов
Однако я не могу заставить его работать. У меня есть этот код, который точно такой же, как тот, который был опубликован 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-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
stream.on('data', (chunk) => console.log(chunk));
? Если нет, попробуйте это и проверьте, получаете ли вы данные или нет. - person Rahul Raval   schedule 17.01.2019stream.pipe(fs.createWriteStream(localFilename));
наstream.on('data', (chunk) => console.log(chunk));
, и ничего не вышло. - person GeorgeBT1902   schedule 17.01.2019100% 726 28.4KB/s 00:00
- person GeorgeBT1902   schedule 17.01.2019