• Java Apache FPTS Client. Как победить 425 Can't open data connection при storeFile()?

    Mishima
    @Mishima Автор вопроса
    Добрый день! Да, я немного ввел в заблуждение, виноват. Пытаюсь подключиться именно FTPS, т е Secure. Обычный FTPClient отваливается еще на этапе подключения.

    Нашел такое решение, хоть и не фонтан:
    Использую SshJ и его SSHClient, SFTPClient:

    public boolean storeMedia(String fileName, byte[] byteArray) {
            try {
                this.addHostKeyVerifier(new PromiscuousVerifier());
                if (!connect()) {
                    return false;
                }
    
                SFTPClient sftpClient = this.newSFTPClient();
    //            byte[] file = IOUtils.toByteArray(inputStream);
                String tempFileName = fileName + ".mp4";
                File tempFile = new File(tempFileName);
                FileUtils.writeByteArrayToFile(tempFile, byteArray);
                LocalSourceFile localSourceFile = new FileSystemFile(tempFile);
                sftpClient.put(localSourceFile, getDirectory() + tempFileName);
    
                boolean isTempFileDeleted = tempFile.delete();
                if (isTempFileDeleted) {
                    getLogger().debug("Temporary file successfully deleted from disk.");
                } else {
                    getLogger().error("File wasn't deleted from disk.");
                }
    
                sftpClient.close();
                this.disconnect();
            } catch (Exception e) {
                System.out.println(e.getMessage());
                if (this.isConnected()) {
    //                client.disconnect();
                }
                System.out.println(e.getMessage());
            }
    }


    Метод connect():
    public boolean connect() {
            try {
                this.addHostKeyVerifier(new PromiscuousVerifier());
                this.connect(getHostname());
    
                if (this.isConnected()) {
                    if (getLogger().isDebugEnabled()) {
                        getLogger().debug("Successfully connected to {}.", getHostname());
                    }
                } else {
                    getLogger().error("Failed to connect to {}.", getHostname());
                    return false;
                }
    
                this.authPassword(getUsername(), getPassword());
    
                if (this.isAuthenticated()) {
                    if (getLogger().isDebugEnabled()) {
                        getLogger().debug("Successfully authenticated at {}.", getHostname());
                    }
                } else {
                    getLogger().error("Failed to authenticate at {}.", getHostname());
                    return false;
                }
    
            } catch (Exception e) {
    
            }
    
            return true;
        }


    где this - это SSHClient

    Вариант плох тем, что приходится формировать временный файл и после отправки на сервер - удалять его. Однако подключение и отправка текста, картинки и видео - просто.

    P.S. Большое спасибо за ответ!