Apache Конечный узел виртуальной файловой системы MINA, указывающий на хранилище объектов S3 - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь подключить хранилище объектов 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. Любая идея, как я могу этого добиться .?

...