Проблемы с Apache Commons FTP - PullRequest
       30

Проблемы с Apache Commons FTP

5 голосов
/ 11 июля 2011

Я хочу реализовать FTP-клиент с Apache Commons Net только для загрузки данных. Подключение и вход на FTP-сервер работает нормально. Но загрузка не работает правильно. Файлы немного большие, как оригиналы. И файлы повреждены. Я попробовал изображение, видео и текстовый файл. Только текстовый файл в порядке.

Теперь вижу при отладке

boolean tmp=client.setFileTransferMode(FTPClient.BINARY_FILE_TYPE);

дает мне false. Так что это не может быть установлено. Зачем? (Может в этом не проблема?)

Вот остаток моего кода

client=new FTPClient();

    try {           
        int reply;
        client.connect(url, port);
        reply = client.getReplyCode();

        if (!FTPReply.isPositiveCompletion(reply))
        {
            client.disconnect();
            System.err.println("FTP server refused connection.");
            System.exit(1);
        }


        client.login(user, pw);
        boolean xxx=client.setFileTransferMode(FTPClient.BINARY_FILE_TYPE);
        client.setControlKeepAliveTimeout(300);
        client.enterLocalPassiveMode();

if (client.isConnected())
    {
    try {
        File file=new File(<FILE>);
        FileInputStream inputStream = new FileInputStream(file);
        OutputStream outputStream = client.storeFileStream(file.getName());

          byte[] buffer = new byte[4096];
          int l;
       while((l = inputStream.read(buffer))!=-1)
               {
                outputStream.write(buffer, 0, l);
            }

          inputStream.close();
          outputStream.flush();
          outputStream.close();}

Ответы [ 3 ]

11 голосов
/ 12 июля 2011

Измените следующее:

boolean xxx=client.setFileTransferMode(FTPClient.BINARY_FILE_TYPE);

Должно быть:

boolean xxx=client.setFileType(FTP.BINARY_FILE_TYPE);

Вы перепутали FileTransferModes с FileTypes.

Доступные типы файлов:

Доступны следующие режимы FileTransfer:

Полагаю, что если бы Apache ввел перечисления для этих константных типов, то такого рода проблем можно было бы избежать, но тогда библиотека не была бы доступна для среды выполнения до java-5.
Интересно, насколько проблематична совместимость с java 1.4?

2 голосов
/ 11 июля 2011

Если только текстовый файл был успешно передан, я подозреваю, что вам нужно установить двоичный тип файла передачи.

См. Метод setFileType , чтобы узнать, как это сделать.

Вики commons-net упоминают, что это является причиной большинства проблем с повреждением файлов.

0 голосов
/ 23 июня 2019

Это работает для меня, загрузка изображения и загрузка после того, как все в порядке: Использование

    FTP.LOCAL_FILE_TYPE

этот код с помощью регистратора, замените его регистратором или используйте System.out.println ("");

    private void cargarData(File filelocal) {
    FTPClient client = new FTPClient();

    try {

        client.connect("URLHOSTFTP", "PORT: DEFAULT 21");
        if (!FTPReply.isPositiveCompletion(client.getReplyCode())) {
            client.disconnect();
            logger.error("FTP server refused connection.");
            System.exit(1);
        }
        client.login("USER FTP", "PASS FTP");
        boolean type = client.setFileType(FTP.LOCAL_FILE_TYPE);

        logger.info("Tipo Aceptado:" + type);
        client.setControlKeepAliveTimeout(300);
        client.enterLocalPassiveMode();
        if (client.isConnected()) {
            FileInputStream fis = null;
            fis = new FileInputStream(filelocal);
            client.storeFile(filelocal.getName(), fis);
            client.logout();
            if (fis != null) {
                fis.close();
            }
        }
        logger.info(client.getReplyString());
    } catch (IOException e) {
        logger.error("error" + e.getMessage());
        e.printStackTrace();

    } catch (Exception e) {
        logger.error("error" + e.getMessage());
        e.printStackTrace();

    }
}
...