使用JSch解释SFTP文件传输中使用的路径

时间:2015-11-09 07:16:34

标签: java sftp jsch

public static void sftpFile( String localDir, 
        String localFileName,
        String localAbsoluteFileName,
        String targetHost, 
        int targetPort,
        String targetDir,
        String identityFile,
        String targetUserId, 
        String targetPassword) throws ErrorCodeException
{

    Session session = null;
    ChannelSftp sftpChannel = null;
    JSch jsch = new JSch();        
    try
    {
        session = jsch.getSession( targetUserId, targetHost, targetPort );
        session.setConfig( "StrictHostKeyChecking", "no" );

        if( identityFile != null )
        {
            jsch.addIdentity( identityFile );
        }

        if( targetPassword != null )
        {
            session.setPassword( targetPassword );
        }

        session.connect();

        Channel channel = session.openChannel( "sftp" );
        channel.connect();
        sftpChannel = (ChannelSftp) channel;
        sftpChannel.cd( targetDir );
        sftpChannel.lcd( localDir );

        sftpChannel.get( localAbsoluteFileName, "." );
        if( log.isTraceEnabled() )
        {
            log.trace( tracePrefix + localFileName + ": Done SFTP" );
        }
    }
    catch( Exception e )
    {
        System.out.println( "Error connecting to target host." );
        throw new ErrorCodeException(ErrorCode.COMMUNICATION_FAILURE);
    }
    finally
    {
        if ( sftpChannel != null )
        {
            sftpChannel.exit();
        }
        if ( session != null )
        {
            session.disconnect();
        }
    }

}

我对以下术语没有明确的看法

  • LOCALDIR
  • TARGETDIR
  • localFileName
  • localAbsoluteFileName

我想将文件test.csv从服务器传输到客户端,从客户端打开SFTP通道。

文件位于服务器" 10.10.20.30"

中的以下位置
/ram/server/files/test.csv

需要复制到客户端中的以下位置" 10.10.20.40"

/ram/client/files

此处localDirtargetDirlocalFileNamelocalAbsoluteFileName是什么 以下步骤是做什么的

sftpChannel.cd( targetDir );
sftpChannel.lcd( localDir );

1 个答案:

答案 0 :(得分:3)

  • localDir - 本地工作目录。代码使用相对目标路径(.),该路径相对于本地工作目录进行解析。由于相对路径是“此路径”(点),因此您可以有效地将文件下载到localDir。您应该将其设置为/ram/client/files
  • targetDir - 远程工作目录。如果localAbsoluteFileName确实是绝对的,则远程工作目录无关紧要。删除使用(.cd调用),或者,如果您不想更改实现,请将其设置为/ram/server/files(或您有权访问的任何其他路径)。尽管名称(“目标”),它实际上是一个源目录,如果它被使用。
  • localFileName - 仅用于记录。
  • localAbsoluteFileName - 尽管名称中包含“local”,但它还是用作远程文件的源路径下载。您应该将其设置为/ram/server/files/test.csv

通常,参数的命名似乎是错误的。看起来有人上传代码,将其更改为下载代码(用.put替换.get),同时保留用于上传的参数命名。