Apache VFS2 - 无法将文件上传到 SFTP 服务器



我正在尝试使用Apache VFS2将文件上传到SFTP服务器。使用WINSCP之类的客户端时,SFTP可以正常工作。我以Internet发现了一些示例来使用Java客户端,但是我一直遇到错误。使用的版本为2.3。代码:

public class SftpPersister
{
    private static final Logger logger          = Logger.getLogger( SftpPersister.class );
    String                      serverAddress   = "ftp.domain.com";
    String                      user            = "myuser";
    String                      password        = "mypass";
    String                      remoteDirectory = "outgoing/";
    String                      localDirectory  = "c:/users/user/";
   public static void main( String[] args )
   {
      new SftpPersister().upload( "ntuser.ini" );
   }
   public boolean upload( String fileName )
   {
      StandardFileSystemManager manager = new StandardFileSystemManager();
      try
      {
        //check if the file exists
        String filepath = localDirectory + fileName;
        File file = new File( filepath );
        if( !file.exists() )
            throw new RuntimeException( "Error. Local file not found" );
        //Initializes the file manager
        manager.init();
        //Setup our SFTP configuration
        FileSystemOptions opts = new FileSystemOptions();
        SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking( opts, "no" );
        SftpFileSystemConfigBuilder.getInstance().setUserDirIsRoot( opts, true );
        SftpFileSystemConfigBuilder.getInstance().setTimeout( opts, 10000 );
        //Create the SFTP URI using the host name, userid, password,  remote path and file name
        String sftpUri = "sftp:///" + user + ":" + password + "@" + serverAddress + "/" + remoteDirectory + fileName;
        // Create local file object
        FileObject localFile = manager.resolveFile( file.getAbsolutePath() );
        // Create remote file object
        FileObject remoteFile = manager.resolveFile( sftpUri, opts );
        // Copy local file to sftp server
        remoteFile.copyFrom( localFile, Selectors.SELECT_SELF );
        logger.info( "File upload successful" );
    }
    catch ( Exception e )
    {
        logger.error( "failure", e );
        return false;
    }
    finally
    {
        manager.close();
    }
    return true;
}

}

执行行远程文件时会抛出异常。

1 [main] ERROR com.company.middletier.storage.SftpPersister  - failure
org.apache.commons.vfs2.FileSystemException: Could not find file with URI "sftp:///myuser:***@ftp.domain.com/outgoing/ntuser.ini" because it is a relative path, and no base URI was provided.
at org.apache.commons.vfs2.FileSystemException.requireNonNull(FileSystemException.java:87)
at org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:733)
at org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:653)
at com.company.middletier.storage.SftpPersister.upload(SftpPersister.java:63)
at com.company.middletier.storage.SftpPersister.main(SftpPersister.java:31)

是某些配置问题还是我缺少的其他内容?

似乎JSCH是必需的运行时依赖关系,需要将其添加到POM文件中。文档中不确定。添加后,所有操作都可以顺利进行。

    <dependency>
        <groupId>com.jcraft</groupId>
        <artifactId>jsch</artifactId>
        <version>${jsch.version}</version>
    </dependency>

对JSCH的影响依赖性帮助我解决了这个问题

gradle builds添加以下依赖项,以构建build.gradle文件。 compile group: 'com.jcraft', name: 'jsch', version: '0.1.55'

不幸的是,Jafts依赖与实施相关性,如下所述,对我不起作用 implementation group: 'com.jcraft', name: 'jsch', version: '0.1.44-1'

相关内容

  • 没有找到相关文章

最新更新