C# SSH.NET 中 SFTP 服务器上文件的流接口

问题描述 投票:0回答:2

我正在使用 SSH.NET 连接到 SFTP 服务器,并尝试将图像读入流中以将其显示在我的网页中。

SftpClient client = connectToServer(IP,user,pwd); 
string remotePath = client.WorkingDirectory.ToString() + dto.Directory + "/"; 
FileStream fs = new FileStream(remotePath + dto.FileName,FileMode.Open); 
Stream strm = fs;

上面的代码抛出无效字符异常。我不确定其原因是否是由于服务器上的文件名所致,即所有这些文件都使用

*
分隔符存储,即
Text1*Text2*Text3.00.png

如果是的话,还有其他方式读取流吗?

我也尝试从

HttpResponse.OutputStream
读取,但这会引发读取/查找无效异常。

HttpResponse response = HttpContext.Current.Response;
Stream strm = response.OutputStream;

还有其他方法读取此类图像文件吗? enter image description here


这是使用

FtpWebRequest
实现相同功能的工作代码。

var request = (FtpWebRequest)WebRequest.Create(serverUri);
request.UsePassive = true;
request.UseBinary = true;
request.Credentials =// 
request.Method = WebRequestMethods.Ftp.DownloadFile;
response = (FtpWebResponse)await request.GetResponseAsync();
Stream responseStream = response.GetResponseStream();

我正在使用 SSH.NET 将其更改为 SFTP。

有没有办法通过 SSH.NET 获得与

GetResponseStream()
相同的输出?

c# .net sftp winscp ssh.net
2个回答
4
投票

如果您需要获取 SFTP 服务器上文件的

Stream
API,请使用 SSH.NET
SftpClient.Open[Read]
:

Stream fs = client.OpenRead(remotePath);

0
投票

使用DownloadFile并将流分配给内存流

public Stream ReadFileAsync(string filePath)
{
    MemoryStream memoryStream = new MemoryStream();
    var sftpClient = new SftpClient(url, userName, password);
    sftpClient.Connect();
    sftpClient.DownloadFile(filePath, memoryStream);
    // Reset the stream position to the beginning
    memoryStream.Position = 0;
    sftpClient.Disconnect();

    return memoryStream;
}
© www.soinside.com 2019 - 2024. All rights reserved.