2

我正在使用 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: , …}
4

1 回答 1

5

作为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'));
    })
于 2018-12-19T07:16:58.407 回答