От новичка до гуру: Курсы программирования на CyberDuff

Apache Commons FTPClient не может получить некоторые файлы

Я использую Apache Commons FTPClient для получения файлов с FTP-сервера. Это установка:

 ftpClient.setDefaultPort(port);
            ftpClient.connect(server);
            ftpClient.login(user, password);
            ftpClient.enterLocalPassiveMode();
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
            ftpClient.changeWorkingDirectory(path);

Это код перевода:

final FileOutputStream fileOutputStream = new FileOutputStream(tempFile);
                    final boolean result = ftpClient.retrieveFile(dirToList + aFile.getName(), fileOutputStream);
                    Log.i(TAG, "[" + (result ? "+" : "-") + "]");

И что я вижу в логах:

I/SyncService( 4412): /Users/user1/Downloads/FtpSync/.idea/copyrightprofiles_settings.xml
I/SyncService( 4412): [-]
<...>
I/SyncService( 4412): /Users/user1/Downloads/FtpSync/footer.php
I/SyncService( 4412): [+]

Все файлы php синхронизируются, и все файлы xml не синхронизируются. FTP-сервер находится на моем локальном ноутбуке (ftp-сервер Mac OS X по умолчанию, tnftpd 20100324 + GSSAPI)

Почему не работает?


Ответы:


1

Во-первых, вы всегда должны закрывать выходной поток после метода retrieveFile. Вы пытались изменить FTP. {Filetype} при загрузке файлов XML (хотя этого не должно быть)?

03.08.2013
  • Поменял на ASCII, это не помогло. 03.08.2013
  • Ваш код не кажется неправильным. Моя следующая идея - права пользователей. Вы уверены, что ваша учетная запись пользователя ftp имеет необходимые права для доступа к xml? А вы пробовали проверить ответ сервера на ваш запрос на загрузку? 04.08.2013
  • Я подключаюсь к учетной записи rankor777, / Users / rankor777 - это домашний адрес этого пользователя. Попробую проверить вручную командой ftp. 04.08.2013

  • 2

    У меня возникли проблемы с загрузкой некоторых больших файлов с помощью метода retrieveFile, при котором он вылетал без исключения. В конце концов, я использовал метод retrieveFileStream, который решил эту проблему за меня.

    Заменять

    status = mFTPClient.retrieveFile(srcFilePath, desFileStream);
    

    С участием

    // import org.apache.commons.io.IOUtils;
    
    InputStream inputStream = mFTPClient.retrieveFileStream(srcFilePath);
    IOUtils.copy(inputStream, desFileStream);
    outputStream.flush();
    IOUtils.closeQuietly(desFileStream);
    IOUtils.closeQuietly(inputStream);
    
    //status = mFTPClient.completePendingCommand();
    status = true;
    

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

    04.09.2013

    3

    используйте этот код для загрузки файлов.

    public boolean ftpDownload(String srcFilePath, String desFilePath)
        {
            boolean status = false;
            try {
                FileOutputStream desFileStream = new FileOutputStream(desFilePath);; //desfilepath where the file is to be stored
                status = mFTPClient.retrieveFile(srcFilePath, desFileStream);
    
                desFileStream.close();
    
                return status;
            } catch (Exception e) {
                Log.d(TAG, "download failed");
            }
    
            return status;
        } 
    
    03.08.2013
  • Какое отношение это имеет к моему вопросу? 03.08.2013
  • Новые материалы

    Основы Spring: Bean-компоненты, контейнер и внедрение зависимостей
    Как лего может помочь нашему пониманию Когда мы начинаем использовать Spring, нам бросают много терминов, и может быть трудно понять, что они все означают. Итак, мы разберем основы и будем..

    Отслеживание состояния с течением времени с дифференцированием снимков
    Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..

    Я предполагаю, что вы имеете в виду методы обработки категориальных данных.
    Я предполагаю, что вы имеете в виду методы обработки категориальных данных. Пожалуйста, проверьте мой пост Инструментарий специалиста по данным для кодирования категориальных переменных в..

    Игра в прятки с данными
    Игра в прятки с данными Я хотел бы, чтобы вы сделали мне одолжение и ответили на следующие вопросы. Гуглить можно в любое время, здесь никто не забивается. Сколько регионов в Гане? А как..

    «Раскрытие математических рассуждений с помощью Microsoft MathPrompter и моделей больших языков»
    TL;DR: MathPrompter от Microsoft показывает, как использовать математические рассуждения с большими языковыми моделями; 4-этапный процесс для улучшения доверия и рассуждений в математических..

    Раскройте свой потенциал в области разработки мобильных приложений: Абсолютная бесплатная серия
    Глава 6: Работа в сети и выборка данных Глава 1: Введение в React Native Глава 2: Основы React Native Глава 3: Создание пользовательского интерфейса с помощью React Native Глава 4:..

    Все о кейсах: Camel, Snake, Kebab & Pascal
    В программировании вы сталкивались с ними при именовании переменной, класса или функции. Поддержание согласованности типов и стилей случаев делает ваш код более читабельным и облегчает совместную..