如何在Node中通过ssh传输大文件



我正在尝试使用ssh2模块流式传输cat命令,但它只是在执行的某个点挂起。我正在执行cat there.txt,其中。txt大约有10 MB左右。

例如:

local = fs.createWriteStream('here.txt');
conn.exec('cat there.txt', function(err, stream) {
     if (err) throw err;
     stream.pipe(local).on('finish, function() { console.log('Done'); });
}

这只是完全停止在一个点。我甚至将流管道传输到本地标准输出,它会在一段时间后挂起。在我的实际代码中,我将它通过一堆其他转换流进行管道传输,因此我认为这比首先将文件传输到本地系统要好(文件可能大于200MB)。

我最近才开始使用流,所以当我通过各种转换流管道传输ssh流时,我没有像在示例中那样在可写流上结束(我应该包括我的实际代码,对不起!)。这导致它挂起。这最初是为了让我可以远程执行多个命令,并将它们的输出排序到一个文件中。

所以,我的原始代码是stream.pipe(transformStream),然后在完成后将transformStream推入数组。然后使用mergesort-stream npm模块进行排序。相反,我只是将多个ssh命令(已转换)的结果写入临时文件,然后一次性对它们进行排序。

尝试createReadStream为大文件提供服务:

fs.exists(correctfilepath, function(exists) {
  if (exists) {
    var readstream = fs.createReadStream(correctfilepath);
    console.log("About to serve " + correctfilepath);
    res.writeHead(200);
    readstream.setEncoding("binary");
    readstream.on("data", function (chunk) {
        res.write(chunk, "binary");
    });
    readstream.on("end", function () {
        console.log("Served file " + correctfilepath);
        res.end();
    });
    readstream.on('error', function(err) {
        res.write(err + "n");
        res.end();
        return;
    });
  } else {
    res.writeHead(404);
    res.write("No datan");
    res.end();
  }
});

相关内容

  • 没有找到相关文章

最新更新