Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net “错误”;“坏消息”;在Windows OpenSSH SFTP服务器上访问文件时_.net_Windows_Sftp_Openssh_Ssh.net - Fatal编程技术网

.net “错误”;“坏消息”;在Windows OpenSSH SFTP服务器上访问文件时

.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

我需要通过SFTP从网站传输大文件。我无法在web服务器上存储这些文件(即使是暂时的),因此我将文件分块流式传输到SFTP服务器

我已在另一台Windows计算机上安装了OpenSSH(),并尝试使用(2016.0.0版)连接到它

此示例代码给出了导致在我的计算机上引发异常的原因:

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服务器上实现。那么,请使用随机文件从其他机器上尝试。