我为我们的客户编写了一项服务,使用FTP自动将文件传输到给定目的地.由于历史原因,我正在使用WinInet执行FTPing.一切正常,但现在客户想要添加一个只接受SFTP连接的目的地.
我真的不喜欢从头开始实现这个的想法,那么有没有办法本地或通过WinInet与SFTP服务器进行通信?有没有我可以使用的系统库(我不担心P/Invoke :))?我是否必须为此购买第三方组件 - 如果是,您会建议哪些?
Mar*_*ryl 16
在任何版本的.NET框架中都不支持SFTP.
您必须使用第三方库来进行SFTP.
您可以使用WinSCP .NET程序集.甚至还有一个WinSCP NuGet包.
一个简单的SFTP上传C#示例:
// Setup session options
SessionOptions sessionOptions = new SessionOptions
{
Protocol = Protocol.Sftp,
HostName = "example.com",
UserName = "user",
Password = "mypassword",
SshHostKeyFingerprint = "ssh-rsa 2048 xxxxxxxxxxx...="
};
using (Session session = new Session())
{
// Connect
session.Open(sessionOptions);
// Upload files
session.PutFiles(@"d:\toupload\*", "/home/user/").Check();
}
Run Code Online (Sandbox Code Playgroud)
还有很多其他的例子.
您可以让WinSCP GUI为您生成SFTP代码模板,如上所述,包括C#,VB.NET和PowerShell.
程序集只是WinSCP脚本的包装器,因此它不是完全原生的.NET代码.因此,它不适合.NET框架中的所有用例.它主要适用于自动化任务,有些用于开发GUI应用程序,而不适用于Web应用程序.
对于完全本机的.NET SFTP库,请参阅SSH.NET,这在任何答案中都没有提及.
(我是WinSCP的作者)
不幸的是,WinInet 或任何其他标准 Windows 库本身并不支持 SFTP。
我很幸运地使用 /n Software 的IP*Works SSH for .NET与各种 SFTP 服务器进行通信。