[英]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.