簡體   English   中英

使用SSH.Net將GzipStream上傳到SFTP

[英]Uploading GzipStream to SFTP using SSH.Net

我正在嘗試使用ssh.net庫將壓縮的GZipStream上傳到sftp服務器。 問題是當我創建GZipStream時,它不能再被讀取了。 以下是我的代碼:

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子句之外進行上傳,並且說無法訪問流。

我怎么處理這個? 是否可以直接這樣做,或者我需要將其寫入本地驅動器然后上傳它...

為了將來參考,我設法找到了如何做到這一點。 您無法在壓縮模式下讀取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");
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM