Rob*_*der 4 .net c# gzipstream 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");
}
}
Run Code Online (Sandbox Code Playgroud)
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)