Конвертировать читаемый поток, чтобы сохранить его как файл в локальном
Я использую ssh2-sftp-client, чтобы получить файл с удаленного сервера. Я получаю файл в удобочитаемом потоке. Я хочу преобразовать этот читаемый поток в нужный файл (sample.png как файл png, файл sample.doc как файл doc и т. Д.)
Вот мой код
let Client = require('ssh2-sftp-client');
let sftp = new Client();
sftp.connect({
host: sftpCredentials.host,
port: sftpCredentials.port,
username: sftpCredentials.username,
password: sftpCredentials.password
}).then(res => sftp.list('/'))
.then(res => {
const file = await sftp.get('/sample.png');
})
Я хочу сохранить этот файл в локальном. Файл является читаемым потоком следующим образом:
ReadStream {_readableState: ReadableState, readable: true, domain: null, _events: Object, _eventsCount: 3, …}
_events:Object {end: , error: , readable: }
_eventsCount:3
_maxListeners:undefined
_readableState:ReadableState {objectMode: false, highWaterMark: 65536, buffer: BufferList, …}
autoClose:true
destroyed:false
domain:null
end:undefined
flags:"r"
handle:Buffer(4) [0, 0, 0, …]
mode:438
path:"/sample.png"
pos:131072
readable:true
readableHighWaterMark:65536
sftp:SFTPStream {_readableState: ReadableState, readable: true, domain: null, …}
start:undefined
__proto__:Readable {open: , _read: , destroy: , …}
1 ответ
Решение
Как file
это читаемый поток, вы можете попробовать
let Client = require('ssh2-sftp-client');
let fsv=vrequire('fs');
let sftp = new Client();
sftp.connect({
host: sftpCredentials.host,
port: sftpCredentials.port,
username: sftpCredentials.username,
password: sftpCredentials.password
}).then(res => sftp.list('/'))
.then(async res => {
const file = await sftp.get('/sample.png');
const ws=fs.createWriteStream('sample.png');
file.pipe(ws);
file.on('end',()=>console.log('done'));
})