我正在尝试实现Java基于SFTP服务器的服务器端监听器,以便在文件传输到来时通知我。我正在使用最新版本的Apache Mina。我的场景是让服务器从客户端接收一个文件并在存储之前对文件进行“某些”处理,这些处理可能包括错误检查/规则验证/将内容转发到其他地方。问题是我想在文件保存到系统之前进行处理。我在文档中遇到了困难,并找不到一个可以访问传入文件流的工作示例,我有一个来自指南的非常简单的服务器:
public void setupServer() throws IOException {
sshd = SshServer.setUpDefaultServer();
sshd.setFileSystemFactory(new NativeFileSystemFactory() {
@Override
public FileSystemView createFileSystemView(final Session session) {
return new NativeFileSystemView(session.getUsername(), false) {
@Override
public String getVirtualUserDir() {
return testFolder.getRoot().getAbsolutePath();
}
};
};
});
sshd.setPort(8001);
sshd.setSubsystemFactories(Arrays
.<NamedFactory<Command>> asList(new SftpSubsystem.Factory()));
sshd.setCommandFactory(new ScpCommandFactory());
sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(testFolder
.newFile("hostkey.ser").getAbsolutePath()));
sshd.setPasswordAuthenticator(new PasswordAuthenticator() {
public boolean authenticate(final String username, final String password,
final ServerSession session) {
return StringUtils.equals(username, USERNAME)
&& StringUtils.equals(password, PASSWORD);
}
});
// SessionListener event = new SessionListener();
sshd.start();
}
那台服务器可以接收文件并将其存储在虚拟文件系统中。我可以读取文件/验证内容,但只能在文件被接收和存储后才能进行。目前基本身份验证就足够了,身份验证机制非常好文档化!
所以我的问题是:
- 是否有一种方式可以动态检查连接何时正在进行/内容何时正在传输,并在实际提交到目录之前拦截它。 - 还是我需要设置一个监听器来监视新文件的出现并相应地处理它?
提前感谢! Leigh.