2013-10-11 56 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"); 
     } 
    } 
}