2013-10-11 28 views
1

我正尝试使用ssh.net库将压缩的GZipStream上传到sftp服务器。问题是,当我创建GZipStream时,无法再读取它。下面是我的代码:使用SSH.Net上传GzipStream到SFTP

using (SftpClient client = new SftpClient(connectionInfo)) 
{ 
    client.Connect(); 
    client.ChangeDirectory("/upload"); 
    var uploadFileDirectory = client.WorkingDirectory + "\testXml.xml.gz"; 


    using (GZipStream gzs = new GZipStream(stream, CompressionLevel.Fastest)) 
    { 
     stream.CopyTo(gzs); 
     client.UploadFile(gzs, "text.xml.gz"); 
    } 
} 

的SftpClient的UploadFile接受一个流,我需要上载被压缩的GzipStream(不存储到本地驱动器,然后再读一遍)。但是GZipStream在压缩时不允许读取。我试图在gzipstream using子句之外进行上传,它说该流不能被访问。

我该如何解决这个问题?是否有可能直接这样做,或者我需要把它写入本地驱动器,然后上传它...

回答

2

为了将来的参考,我设法找到如何做到这一点。您无法在压缩模式下读取gZipStream,但您可以创建另一个前一个字节的MemoryStream,如下所示:

using (SftpClient client = new SftpClient(connectionInfo)) 
{ 
    client.Connect(); 
    client.ChangeDirectory("/upload"); 

    using (MemoryStream outputStream = new MemoryStream()) 
    { 
     using (var gzip = new GZipStream(outputStream, CompressionLevel.Fastest)) 
     { 
      stream.CopyTo(gzip);     
     } 
     using (Stream stm = new MemoryStream(outputStream.ToArray())) 
     { 
      client.UploadFile(stm,"txt.gz"); 
     } 
    } 
}