Не удается получить базовую кодировку изображений в SFTP, конвейер работает - PullRequest
0 голосов
/ 12 декабря 2018

У меня работает локальный 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 портят вещи.

...