gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 23:41:00 29 4
gpt4 key购买 nike

我正在尝试使用 Apache VFS2 将文件上传到 SFTP 服务器。使用 WinSCP 等客户端时,SFTP 工作正常。我在互联网上找到了一些例子来使用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;
}

}

执行remoteFile.copyFrom( localFile, Selectors.SELECT_SELF ) 行时抛出异常:

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 文件中。不确定文档中是否提到。添加后一切顺利。

关于java - Apache VFS2 - 无法将文件上传到 SFTP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56145381/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com