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();
}
}
}
我对以下术语没有明确的看法
我想将文件test.csv
从服务器传输到客户端,从客户端打开SFTP通道。
文件位于服务器" 10.10.20.30"
中的以下位置/ram/server/files/test.csv
需要复制到客户端中的以下位置" 10.10.20.40"
/ram/client/files
此处localDir
,targetDir
,localFileName
,localAbsoluteFileName
是什么
以下步骤是做什么的
sftpChannel.cd( targetDir );
sftpChannel.lcd( localDir );
答案 0 :(得分:3)
localDir
- 本地工作目录。代码使用相对目标路径(.
),该路径相对于本地工作目录进行解析。由于相对路径是“此路径”(点),因此您可以有效地将文件下载到localDir
。您应该将其设置为/ram/client/files
。targetDir
- 远程工作目录。如果localAbsoluteFileName
确实是绝对的,则远程工作目录无关紧要。删除使用(.cd
调用),或者,如果您不想更改实现,请将其设置为/ram/server/files
(或您有权访问的任何其他路径)。尽管名称(“目标”),它实际上是一个源目录,如果它被使用。localFileName
- 仅用于记录。localAbsoluteFileName
- 尽管名称中包含“local”,但它还是用作远程文件的源路径下载。您应该将其设置为/ram/server/files/test.csv
。通常,参数的命名似乎是错误的。看起来有人上传代码,将其更改为下载代码(用.put
替换.get
),同时保留用于上传的参数命名。