我正在尝试使用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");
}
}
}