我正在使用 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;
这是使用
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()
相同的输出?
如果您需要获取 SFTP 服务器上文件的
Stream
API,请使用 SSH.NET SftpClient.Open[Read]
:
Stream fs = client.OpenRead(remotePath);
使用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;
}