使用 SSH.Net 将 GzipStream 上传到 SFTP

本文关键字:SFTP GzipStream SSH Net 使用 | 更新日期: 2023-09-27 18:34:54

我正在尝试使用 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 子句之外进行上传,它说无法访问流。

我该如何解决这个问题?是否可以直接以这种方式执行此操作,或者我需要将其写入本地驱动器然后上传...

使用 SSH.Net 将 GzipStream 上传到 SFTP

为了将来参考,我设法找到如何做到这一点。您无法在压缩模式下读取 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");
        }
    }
}