gpt4 book ai didi

.net - 访问 Windows OpenSSH SFTP 服务器上的文件时出现错误 "Bad message"

转载 作者:可可西里 更新时间:2023-11-01 11:47:56 26 4
gpt4 key购买 nike

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

我在另一台 Windows 机器上安装了 OpenSSH ( version 5_30_2016 ) 并尝试使用 SSH.NET 连接到它(版本 2016.0.0)。

此示例代码导致在我的机器上抛出异常:

const string PATH = "/D:/sftp/test.xml";
var Client = new SftpClient("host", 22, "username", "password");

Client.Connect();

if(!Client.Exists(PATH))
{
var s = Client.Create(PATH, 1024 * 4);
s.Dispose();
}

var Data = File.ReadAllBytes(@"D:\Temp\TestFile.xml");
using(var w = Client.Open(PATH, FileMode.Append, FileAccess.ReadWrite)) // this line throws an exception
{
w.Write(Data, 0, Data.Length);
}

Client.Disconnect();

每当我尝试连接我的客户端以附加或打开时,我都会收到 SSH 异常 - 基本上任何返回 StreamStreamWriter 的操作。

我通过 SFTP 客户端返回的错误是“Bad Message”,它的描述性不强。我只是希望我在我的方法中错过了一些明显的东西......!

我也尝试过使用其他 SFTP 库,但它们似乎都依赖于将物理本地文件传递到远程位置,这不是我想要做的。看来 SSH.NET 最适合我的需求,因为它提供了将字节数组和流传递到 SFTP 服务器的方法

堆栈跟踪,带有消息 “Bad Message”:

   at Renci.SshNet.Sftp.SftpSession.RequestOpen(String path, Flags flags, Boolean nullOnError)
at Renci.SshNet.Sftp.SftpFileStream..ctor(ISftpSession session, String path, FileMode mode, FileAccess access, Int32 bufferSize, Boolean useAsync)
at Renci.SshNet.Sftp.SftpFileStream..ctor(ISftpSession session, String path, FileMode mode, FileAccess access, Int32 bufferSize)
at Renci.SshNet.SftpClient.Open(String path, FileMode mode, FileAccess access)

最佳答案

这是 FileMode.Append 模式。

Windows OpenSSH服务器好像不支持

当您将其替换为 FileMode.Create 时,它会起作用。


您可以使用 SftpFileStream.Writeoffset 参数代替 FileMode.Append

关于.net - 访问 Windows OpenSSH SFTP 服务器上的文件时出现错误 "Bad message",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39395340/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com