Я пытаюсь подключить хранилище объектов s3 к фабрике виртуальных файловых систем Apache MINA. По сути, я создал виртуальную файловую систему (полностью виртуальную (не в памяти и не виртуальную для физического представления)), используя Apache MINA, которую пользователь увидит после входа в систему через SFTP-клиент. Теперь на листовом узле структуры каталогов мне нужно получить файлы из корзины хранилища объектов S3.
Любая помощь для того, как подключить хранилище объектов S3 в этом сценарии.
Ниже приведен код, который я использовал для настройки виртуальной файловой системы и структуры каталогов.
S SH вызов файла
sshServer.setFileSystemFactory(CustomVirtualFileSystemFactory.createFileSystemFactory(bucketName));
CustomVirtualFileSystemFactory class
расширяется VirtualFileSystemFactory
, который переопределите функцию ниже для возврата базы файловой системы на схему.
@Override
public Path getUserHomeDir(String userName) {
URI u = null;
try {
u = new URI("xyz:///!/");
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Path p = Paths.get(u);
log.debug("Directory root path set up for XYZ user " + p);
return p;
}
Это в конечном итоге возвращает root из FileSystem, и я переопределил пользовательский newDirectoryStream
FileSystemProvider, как показано ниже.
@Override
public DirectoryStream<Path> newDirectoryStream(Path dir, Filter<? super Path> filter) throws IOException {
// TODO Auto-generated method stub
return new DirectoryStream<Path>() {
@Override
public void close() throws IOException {
// TODO Auto-generated method stub
log.debug("Unimplemented Method close");
}
//Setting the directories as MFE path
public Iterator<Path> iterator() {
String xyzSchema = "xyz:///!/";
return getPathUtilInstance().pathAbstract(dir,xyzSchema);
}
};
}
Где Iterator возвращает базу каталогов текущего узла, в котором вы находитесь:
public Iterator<Path> pathAbstract(Path dir, String schema){
log.debug("In Path Utils directory " +dir + " for schema : " + schema);
List<Path> rootDirectories = new ArrayList<>();
String [] parts = dir.toString().replaceFirst("^/", "").split("/");
int partsLength = parts.length;
if(dir.toString().equals("/")){
return folders(dir, userComponent.getEndPoints() , schema);
}
else if(partsLength==1){
return folders(dir, userComponent.getEnvironmentFolders() , schema);
}
else if(partsLength==2){
return folders(dir, userComponent.getStatusFolders() , schema);
}
else if(partsLength==3){
return userBuilkId(dir, parts, userComponent.getUserBulkId() , schema);
}
else{
return rootDirectories.iterator();
}
Теперь в последнем случае {} мне нужно получить файлы из корзины хранилища объектов s3 или apache minio. Любая идея, как я могу этого добиться .?