Загрузка GzipStream в SFTP с использованием SSH.Net

Я пытаюсь загрузить сжатый GZipStream на sftp-сервер, используя библиотеку ssh.net. Проблема в том, что когда я создаю 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");
     }
}

UploadFile SftpClient принимает поток, и мне нужно загрузить сжатый GzipStream (без сохранения на локальный диск и повторного чтения). Но GZipStream не позволяет читать, когда он сжат. Я попытался выполнить загрузку вне предложения gzipstream using, и он говорит, что к потоку нет доступа.

Как я могу подойти к этому? Возможно ли сделать это напрямую или мне нужно записать его на локальный диск, а затем загрузить...


person Rob Schneider    schedule 11.10.2013    source источник


Ответы (1)


Для дальнейшего использования мне удалось найти, как это сделать. Вы не можете прочитать 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");
        }
    }
}
person Rob Schneider    schedule 14.10.2013