.net “错误”;“坏消息”;在Windows OpenSSH SFTP服务器上访问文件时
我需要通过SFTP从网站传输大文件。我无法在web服务器上存储这些文件(即使是暂时的),因此我将文件分块流式传输到SFTP服务器 我已在另一台Windows计算机上安装了OpenSSH(),并尝试使用(2016.0.0版)连接到它 此示例代码给出了导致在我的计算机上引发异常的原因:.net “错误”;“坏消息”;在Windows OpenSSH SFTP服务器上访问文件时,.net,windows,sftp,openssh,ssh.net,.net,Windows,Sftp,Openssh,Ssh.net,我需要通过SFTP从网站传输大文件。我无法在web服务器上存储这些文件(即使是暂时的),因此我将文件分块流式传输到SFTP服务器 我已在另一台Windows计算机上安装了OpenSSH(),并尝试使用(2016.0.0版)连接到它 此示例代码给出了导致在我的计算机上引发异常的原因: const string PATH=“/D:/sftp/test.xml”; var客户端=新的SftpClient(“主机”,22,“用户名”,“密码”); Client.Connect(); 如果(!Client
const string PATH=“/D:/sftp/test.xml”;
var客户端=新的SftpClient(“主机”,22,“用户名”,“密码”);
Client.Connect();
如果(!Client.Exists(PATH))
{
var s=Client.Create(路径1024*4);
s、 处置();
}
var Data=File.ReadAllBytes(@“D:\Temp\TestFile.xml”);
使用(var w=Client.Open(PATH,FileMode.Append,FileAccess.ReadWrite))//此行引发异常
{
w、 写入(数据,0,数据长度);
}
Client.Disconnect();
每当我尝试将客户端连接到append或open(基本上是返回流
或流编写器
的任何操作)时,都会出现SSH异常
我通过SFTP客户端返回的错误是“坏消息”,这不是很好的描述。我只是希望我的方法中遗漏了一些明显的东西
我也尝试过使用其他SFTP库,但它们似乎都依赖于将物理本地文件传递到远程位置,这不是我想要做的。看来SSH.NET最适合我的需要,因为它提供了将字节数组和流传递到SFTP服务器的方法
堆栈跟踪,带有消息“坏消息”:
位于Renci.SshNet.Sftp.SftpSession.RequestOpen(字符串路径、标志、布尔NullOneError)
位于Renci.SshNet.Sftp.SftpFileStream..ctor(ISftpSession会话、字符串路径、文件模式、文件访问、Int32 bufferSize、布尔UseAncy)
在Renci.SshNet.Sftp.SftpFileStream..ctor(ISftpSession会话、字符串路径、文件模式、文件访问访问、Int32缓冲区大小)
在Renci.SshNet.SftpClient.Open(字符串路径、文件模式、文件访问)
这是文件模式。追加模式
Windows OpenSSH服务器似乎不支持它
当您将其替换为FileMode.Create
时,它可以工作
您可以使用SftpFileStream.Write
的offset
参数,而不是FileMode.Append
,这是Windows上OpenSSH的一个问题,Github上出现了一个问题
您使用的SSH.NET和OpenSSH的版本是什么?普通控制台应用程序的结果是否相同?也就是说,没有异步代码。你应该在发帖之前创建一个问题。嘿@MartinPrikryl我已经用一个更简单的代码片段更新了我的问题。在回答您的问题时,排除了WebApi、请求解析器和异步内容。此外,我第一次尝试使用SFTP并在windows上设置SSH。WinSCP网站是一个非常棒的资源!不幸的是,删除前导斜杠会产生相同的结果。另外,使用带前导斜杠的路径的其他命令(如创建目录和空文件)似乎可以工作,而不管前导斜杠是什么。对我来说,即使是Client.Create
也会以斜杠开头失败。无论如何,您可以使用任何命令行SFTP客户端(如WinSCP:WinSCP.com/command“upload”)上传文件吗sftp://username@password@host/“将D:\Temp\TestFile.xml D:/sftp/test.xml放入”“退出”
+您甚至可以在WinSCP GUI中浏览到D:/sftp
吗?我本来希望能够这样做,但不幸的是,出于安全原因,我无法将文件存储在临时位置。发布的文件必须保存在内存中,并且只能在SFTP服务器上实现。那么,请使用随机文件从其他机器上尝试。