如何通过 ASP.NET 使用 SFTP 将文件上传到服务器?

How to upload file in server using SFTP through ASP.NET?

我正在使用 SharpSsh 通过 ASP.NET 使用 SFTP 将文件传输到服务器。

下面是我的源代码。但是我收到错误!

    using System.Collections;
    using System.Threading;
    using System.IO;
    using Tamir.SharpSsh;
    using Tamir.Streams;

    protected void btnUpload_Click(object sender, EventArgs e)
    {
        if (fuUploadFile.HasFile)
        {
           string _ftpURL = "ftp://22.00.333.444/"; 
           string _UserName = "admin";     
           string _Password = "admin123";  
           int _Port = 22;                 
           string _ftpDirectory = "/TestFTP";
           string LocalDirectory = 
           Server.MapPath(fuUploadFile.PostedFile.FileName); 
           string FileName = fuUploadFile.FileName;;    

           Sftp oSftp = new Sftp(_ftpURL, _UserName, _Password);
           oSftp.Connect(_Port);
           oSftp.Put(LocalDirectory , _ftpDirectory + "/" + FileName);
           oSftp.Close();
        }
    }

当我尝试 运行 代码时出现以下异常,请帮助我解决此异常。

    System.Net.Sockets.SocketException: The requested name is valid, but no data of the requested type was found
    at System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)
    at System.Net.Dns.GetHostByName(String hostName)
    at Tamir.SharpSsh.java.net.Socket..ctor(String host, Int32 port)
    at Tamir.SharpSsh.jsch.Util.createSocket(String host, Int32 port, Int32 timeout)

Tamir.SharpSsh.Sftp 构造函数的 sftpHost 参数采用 IP 地址或主机名,而不是 URL。即使需要 URL,它也会是 sftp://,而不是 ftp://

所以应该是:

Sftp oSftp = new Sftp("22.00.333.444", _UserName, _Password);

当然 22.00.333.444 不是有效的 IP 地址。


我强烈建议您不要使用 SharpSSH。这是一个死项目。

有关替代方案,请参阅:

  • How do I upload a file to an SFTP server in C# / .NET?
  • SFTP Libraries for .NET