У меня работает локальный SFTP-сервер, и я пытаюсь получить образец изображения.Для этого я использую ssh2-sftp-client npm модуль.
Проблема в том, что, если я передаю ответ напрямую потоку узлов для записи, он работает.Но если я попытаюсь добавить чанк, используя событие data
, это не сработает.
Цель всего этого процесса - получить базовую кодировку изображения без загрузки фактического файла на сервер.
Некоторые пункты, которые могут помочь вам, добавляются в код в качестве комментариев.
Любой другой метод приветствуется.
Код
let Client = require('ssh2-sftp-client');
let fs = require('fs');
let sftp = new Client();
const btoa = require('btoa');
sftp.connect({
host: '*******',
port: '22',
username: '******',
password: '******'
})
.then(() => {
// true is to use compression, i have tried changing both true and false
// null is to avoid using any encoding
return sftp.get('Path To My File', true, null);
}).then((stream) => {
// stream.pipe(fs.createWriteStream('pipe-image.png')); This is working.
var fileBuffer = '';
var i = 0;
stream.on('data', (chunk) => {
// data event is coming 4 times in my case
console.log(i++, chunk.length);
fileBuffer += btoa(chunk);
});
stream.on('end', () => {
console.log('end');
fs.writeFileSync('new.png', fileBuffer, {
encoding: 'base64'
});
});
stream.on('close', data => console.log('close'));
stream.on('error', data => console.log('error'));
stream.on('readable', () => console.log('readable'));
});
Консольный вывод
0 65536
1 65536
2 65536
3 51985
readable
end
close
Я думаю, что первое событие data
дает правильное частичное изображение (верхняя часть), но последующие события data
портят вещи.