Вы получаете ошибку, потому что sftp.get
возвращает Buffer
, и вы пытаетесь передать ее функции, которая ожидает Stream
.
Измените свой код на этот
let Client = require('ssh2-sftp-client');
let sftp = new Client();
var csv = require("csvtojson");
sftp.connect({
host: 'HOST',
port: 'PORT',
username: 'USERNAME',
password: 'PASSWORD'
}).then(() => {
return sftp.get('/home/user/etc/testfile.csv');
}).then((data) => {
csv()
.fromString(data.toString()) // changed this from .fromStream(data)
.subscribe(function(jsonObj) { //single json object will be emitted for each csv line
// parse each json asynchronousely
return new Promise(function(resolve, reject) {
resolve()
console.log(jsonObj);
})
})
}).catch((err) => {
console.log(err, 'catch error');
});
прекрасно работает с gzip
(gzip и zlib - одно и то же сжатие, но с разными заголовками/"обертыванием". Ваша ошибка имеет эту информацию в сообщении).
import gzip
import urllib.request
request = urllib.request.Request(
"http://google.com/search?q=foo",
headers={
"Accept-Encoding": "gzip",
"User-Agent": "Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127 Firefox/2.0.0.11",
})
response = urllib.request.urlopen(request)
gzipFile = gzip.GzipFile(fileobj=response)
gzipFile.read()
В Python 3, StringIO
класс в io
модуль.
Таким образом для примера Вы связались с, если Вы изменяетесь:
import StringIO
compressedstream = StringIO.StringIO(compresseddata)
кому:
import io
compressedstream = io.StringIO(compresseddata)
это должно работать.