1

サーバーのファイルのリストを取得し、正しいリストを渡すため、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"); を使用してみました。

私は試してみました sftp.Put(FileName,SFTPAddress); そして、それは機能しますが、ファイルが存在する場合にsftpサーバーを見ると、そうではありません。

試してみました sftp.Put(FileName,"//u01"); 同じエラーがスローされます。

ファイルを ftp サーバーのフォルダーにアップロードする必要があり、そのフォルダーの 1 つがu01です。

誰でも私を助けることができますか?何が悪いのかわからない。つながっているとおもいます。そして、filezilla を使用してアップロードしようとすると、うまくいくので、sftp サーバーへの書き込みに制限はありません。

4

2 に答える 2

1

への呼び出しで完全なファイル名を入力する必要があると思いますPut

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

は実装されていないことに注意してくださいStripPathComponent。必要に応じて実装する必要があります。からパス コンポーネントをFileName取り除きます。つまり、C:\...\またはを削除し..\...\ます。

于 2014-08-07T09:30:19.297 に答える
0

また、このライブラリを使用してローカル/共有パスから 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;
}
于 2016-11-11T16:54:23.537 に答える