繁体   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