【问题标题】:Uploading GzipStream to SFTP using SSH.Net使用 SSH.Net 将 GzipStream 上传到 SFTP
【发布时间】:2023-04-01 06:13:01
【问题描述】:

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

我该如何处理?甚至可以直接这样做还是我需要将其写入本地驱动器然后上传...

【问题讨论】:

    标签: c# .net gzipstream ssh.net


    【解决方案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");
            }
        }
    }
    

    【讨论】:

    • 我知道这是 8 岁,但感谢您添加答案。这正是我想要做的,我遇到了同样的问题。
    猜你喜欢
    • 1970-01-01
    • 2018-11-03
    • 2022-01-01
    • 2016-12-08
    • 2015-12-28
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多