上传到FTP服务器c#使用Tamir.SharpSSH

本文关键字:使用 Tamir SharpSSH 服务器 FTP | 更新日期: 2023-09-27 18:16:49

我能够连接到我的sftp服务器,我确信它,因为我得到了我的服务器的文件列表,它传递正确的列表。但我不能上传文件到一个文件夹在mysftp服务器。下面是我的代码:

  private static void FileUploadUsingSftp(string SFTPAddress, string SFTPUserName, string SFTPPassword,
        string SFTPFilePath, string FileName)
    {
        Sftp sftp = null;
        try
        {
            sftp = new Sftp( SFTPAddress,SFTPUserName , SFTPPassword);
            // Connect Sftp
            sftp.Connect();
            MessageBox.Show("Connected!");

            //Check if im surely connected
            //list down files in my sftp server folder u01
            ArrayList list;
            list = sftp.GetFileList("//u01");
            foreach (string item in list)
            {
                MessageBox.Show(item.ToString());
            }
            MessageBox.Show(list.Count.ToString());
            // upload file 
            sftp.Put(FileName, "//u01"); -----> **I get exception here**
            MessageBox.Show("UPLOADED!");

            // Close the Sftp connection
            sftp.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
        finally
        {
            if (sftp != null)
            {
                sftp.Close();
            }
        }
    }

我收到这个异常:

"Exception of type 'Tamir.SharpSsh.jsch.SftpException' was thrown."
at Tamir.SharpSsh.jsch.ChannelSftp.put(String src, String dst, SftpProgressMonitormonitor, Int32 mode)
at Tamir.SharpSsh.Sftp.Put(String fromFilePath, String toFilePath)

我试过使用sftp。Put(FileName,SFTPAddress + "//u01");

Ive try sftp.Put(FileName,SFTPAddress);它确实有效,但当我查看我的sftp服务器时如果文件在那里,它就不在了。

我试过sftp.Put(FileName,"//u01");并抛出相同的错误

我必须上传我的文件在我的ftp服务器的一个文件夹,其中一个文件夹是u01

有谁能帮帮我吗?我不知道怎么了。我确信我是有联系的。当我尝试使用filezilla上传时,它确实工作,所以我不限制在我们的sftp服务器上写

上传到FTP服务器c#使用Tamir.SharpSSH

我认为您必须在呼叫Put时输入完整的文件名。

string strippedFileName = StripPathComponent(FileName);
sftp.Put(FileName,"//u01//" + strippedFileName);

请注意,StripPathComponent没有实现,如果需要,您也必须实现它。它将从FileName中剥离一个路径分量,即移除C:'...'..'...'

我也在寻找如何使用这个库从本地/共享路径上传文件到SFTP服务器,最终找到了解决方案。您可以使用下面的代码:

string host="ssgty";
string username="usr";
string password="passw";
int port=22;
string fromFile=@"D:'Test.txt";
string toFile=@"/dmon/myfolder/Test.txt";
public string CopyToFTP(string host, string username, string password, int port, string fromFile, string toFile)
{
      string error = "";
      try
      {
           Scp scp = new Scp(host, username, password);
           scp.Connect(port);
           scp.To(fromFile, toFile);
      }
      catch (Exception ex)
      {
           error = ex.Message;
      }
      return error;
}