使用SSH.Net下载并返回非阻塞数据流

我正在使用ssh.net库执行SFTP操作以处理大型数据文件( > = 500MB

我遇到了如何以非阻塞方式返回数据的问题。

ftpClient.DownloadFile()方法签名是正确的,当写入文件或者有某种方式我可以实例化流,但是当我想要在不阻塞的情况下返回流时遇到如何使用它的问题。

到目前为止我看到的所有示例都是将下载文件写入文件流。 什么都不会只返回一个流

使用.Net的内置FTP,您只需使用response.GetResponseStream() ,它会回送数据,而不会阻塞。

在return语句中使用它的唯一方法是写入临时文件。 但这导致它成为阻塞操作。

  var tmpFilename = "temp.dat"; int bufferSize = 4096; var sourceFile = "23-04-2015.dat"; using (var stream = System.IO.File.Create(tmpFilename , bufferSize, System.IO.FileOptions.DeleteOnClose)) { sftpClient.DownloadFile(sourceFile, stream); return stream; } 

我不希望它阻止但是要回流数据。

我也想避免创建一个临时文件。

是否有替代实现使其回流数据?

或者是否有可以实例化的替代流( MemoryStream除外),它可以用于大文件?

这是一个老问题,但我有类似的问题。 如果要直接获取流,可以写入MemoryStream。

 SftpClient _sftpClient; _sftpClient = new SftpClient("sftp.server.domain", "MyLoginHere", "MyPasswordHere"); Stream fileBody = new MemoryStream(); _sftpClient.DownloadFile(ftpFile.FullName, fileBody); fileBody.Position = 0; //dont forget to set the stream position back to beginning 

如果要下载文件,可以将其作为单独的线程或异步调用,然后调用委托:

 _sftpClient.DownloadFile(ftpFile.FullName, fileBody, YourActionDelegateHere);